Python Selenium 定位详解

id定位

find_element_by_id()

采用id属性进行定位。例如在百度页面中输入关键字 Selenium 进行搜索。百度部分关键html源码如下:

在这里插入图片描述

百度输入框和百度一下的按钮都有id,那么定位代码如下:

#coding=utf-8
from selenium import webdriver
import time
 
driver = webdriver.Chrome()
#等待
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
 
driver.find_element_by_id("kw").send_keys("Selenium")
driver.find_element_by_id("su").click()

#等待两秒钟 
time.sleep(2)
#退出浏览器
driver.quit()

name定位

find_element_by_name()

driver.find_element_by_name("wd")

class_name定位

find_element_by_class_name()

driver.find_element_by_class_name("s_ipt")

xpath定位

find_element_by_xpath()
xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素的路径来完成对元素的查找。HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式。

获取xpath、css_selector路径方法

打开谷歌浏览器–>打开百度–>键盘点击F12–点击定位位置–>点击源码位置–>邮件copy

在这里插入图片描述

绝对路径

如百度搜索框的绝对路径xpath定位:

driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input")

相对路径(属性标签等)

搜索框还可以利用id和name属性去定位:

driver.find_element_by_xpath("//input[@id='kw']")
driver.find_element_by_xpath("//*[@name='wd']")

标签名input也可以定位,只要在该标签内,任意属性都可以,比如搜索框的maxlength属性:

driver.find_element_by_xpath("//input[@maxlength='255']")
driver.find_element_by_xpath("//form[@id='form']/span/input")

注:如果元素的单个属性无法确定其唯一性,可以用and连接多个属性去确定

css_selector定位

find_element_by_css_selector()
CSS属性定位可以比较灵活地选择控件的任意属性,定位方式也会比xpath快

driver.find_element_by_css_selector("#kw")
driver.find_element_by_css_selector(".s_ipt")

注:class是用.标记,id是用#标记

driver.find_element_by_css_selector("input[autocomplete='off']").send_keys("selenum")
driver.find_element_by_css_selector("span.bg.s_btn_wr>input#su").click()

说明

  1. “input[autocomplete=‘off’]”,autocomplete=‘off’ 为input内属性值;
  2. “span.bg.s_btn_wr>input#su”,先定位到一个class名为bg >s_btn_wr的span标签,在这个标签下面有一个id为su的input标签
    注:在css里面下级标签元素用>连接,如果class里面有空格,空格用.进行连接

tag_name定位

find_element_by_tag_name ()

html标签,如input、a、form等
一般定位如下:find_element_by_tag_name(“input”),因为一个html一个标签存在多个因此这种定位方式用的比较少

link_text 定位

find_element_by_partial_link_text()
定位标签:
html源码:

 <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
#全部匹配
driver.find_element_by_link_text("新闻").click()
#部分匹配
driver.find_element_by_partial_link_text("闻").click()

Xpath&Css定位方法速查表

描述XpathCss
直接子元素//div/adiv > a
子元素或后代元素//div//adiv a
以id定位//div[@id=‘idValue’]//adiv#idValue a
以class定位//div[@class=‘classValue’]//adiv.classValue a
同级弟弟元素//ul/li[@class=‘first’]/following-ul>li.first + li
属性//form/input[@name=‘username’]form input[name=‘username’]
多个属性//input[@name=‘continue’ andinput[name=‘continue’][type='button
第4个子元素//ul[@id=‘list’]/li[4]ul#list li:nth-child(4)
第1个子元素//ul[@id=‘list’]/li[1]ul#list li:first-child
最后1个子元素//ul[@id=‘list’]/li[last()]ul#list li:last-child
属性包含某字段//div[contains(@title,‘Title’)]div[title*=“Title”]
属性以某字段开头//input[starts-with(@name,‘user’)]input[name^=“user”]
属性以某字段结尾//input[ends-with(@name,‘name’)]input[name$=“name”]
text中包含某字段//div[contains(text(), ‘text’)]无法定位
元素有某属性//div[@title]div[title]
父节点//div/…无法定位
同级哥哥节点//li/preceding-sibling::div[1]无法定位

By定位

#By定位必备导入
from selenium.webdriver.common.by import By

find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,u"新闻")
find_element(By.PARTIAL_LINK_TEXT,u"新")
find_element(By.XPATH,"//*[@class='bg s_btn']")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su") 

elements复数定位

说明:复数定位方式每次取到的都是具有相同类型属性的一组元素,所以返回的是一个list值

在这里插入图片描述

如上图需要定位到时视频,再点击视频链接

#注意下标是从0开始,所以视频下标为3
driver.find_elements_by_class_name("mnav")[3].click()
#也可以借助pop()函数,一般pop()或pop(-1)表示获取元素种的最后一个,pop(3)表示第4个
driver.find_elements("css selector",".mnav").pop(3).click()

JS的定位

#以下Element 返回单值,Elements复数返回列表值
id定位:document.getElementById()
name定位:document.getElementsByName()
tag定位:document.getElementsByTagName()
class定位:document.getElementsByClassName()
css定位:document.querySelectorAll()

源码举例

search_js = "document.getElementsByName('wd')[0].value='selenium';"
search_js2 = "document.querySelectorAll('.s_ipt')[0].value='selenium';"
button_js = "document.getElementById('su').click();"
button_js2 = "document.getElementsByClassName('s_btn')[0].click()"
driver.execute_script(search_js2)
driver.execute_script(button_js2)

以上为常用的四种js定位方式都需要执行的就execute_script())

jQuery语法是为HTML元素的选取编制的,可以对元素执行一些具体的操作
基础语法是$(selector).action()
$符号定义jQuery,selector选择器用来查询具体的HTML元素,通过action()来执行对元素的具体操作。
其中我们经常用到的action()在jq中有这么几种:

$(selector).val('input_value') 其中input_value表示要输入的文本的值
$(selector).val('') 如果为空,则执行后是清空的操作
$(selector).click() 点击

源码举例

search_jq = "$('#kw').val('selenium')"
button_jq = "$('.s_btn').click()"
driver.execute_script(search_jq)
driver.execute_script(button_jq)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值