1、8种定位方式
不管用什么方式,必须保证这种方式是唯一 (一个html中)
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">很长的一句话</a>
# id
dr.find_element_by_id('kw')
# name
dr.find_element_by_name("wd" )
# class
dr.find_element_by_class_name("s_ipt")
#tag
dr.find_element_by_tag_name("input") #理论上可以,但是有可能是通用属性,不唯一。我们可以查找一组元素,筛选想要的某一个元素
# link_text
dr.find_element_by_link_text("新闻")
dr.find_element_by_partial_link_text("很长")
xpath
//表示当前页面某个目录下,input表示定位元素的标签名,*表示匹配任何类型的标签,[ ]表示属性的定位方式
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
#xpath
dr.find_element_xpath("//*[@id='kw']") # []外面用双引号,里面则用单引号;反之
dr.find_element_xpath('//*[@name="wd"]')
dr.find_element_xpath('//input[@class="s_ipt"]') #最好使用标签名,不要用*
dr.find_element_xpath('//input[@maxlength="255"]')
- input标签没有属性时,找父级
<span class="bg s_ipt_wr quickdelete-wrap">
<span class="soutu-btn"></span>
<input />
<input />
</span>
dr.find_element_xpath("//span[@class='bg s_ipt_wr quickdelete-wrap']/input") #只有一个<input />时
dr.find_element_xpath("//span[@class='bg s_ipt_wr quickdelete-wrap']/input[2]") #查找第2个<input />
- span、input都没有属性时
<form id="form" name="f" action="/s" class="fm">
<span class="">
<input />
<input />
</span>
</form>
dr.find_element_xpath("//form[@name='f']/span/input[2]")
- 绝对路径
- 优点:页面不发生变化,95% 可以通过该路径找到指定元素
- 弊端:一旦页面发生一点点变化,该元素就找不到了
- 不到万不得已,不推荐用这种定位方式
- 容易出错,又臭又长,容易变化
dr.find_element_xpath("/html/body/div/div/div/div/div/div/from/span/input") #html是开始位置,所以用/
- 多条件属性
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
dr.find_element_xpath("//span[@class='bg....']/input[@id='kw' and @name='wd' and @class='s_ipt']")
css
# # = id
dr.find_element_by_css_selector("#kw")
# . = class
dr.find_element_by_css_selector(".s_ipt")
# 属性定位
dr.find_element_by_css_selector("[name='wd']")
dr.find_element_by_css_selector("input[maxlength = 255]")
#层级、父子关系定位
dr.find_element_by_css_selector("span.bg s_ipt_wr quickdelete-wrap > input")
dr.find_element_by_css_selector("form#form.fm > span > input#kw")
#绝对路径
dr.find_element_by_css_selector("html > body > div > div > div > div > div > div > form > span > input")
- 示例
from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
dr.find_element_by_xpath("//form[@class='fm']/span/input[@id='kw' and @name='wd']").send_keys('find')
dr.find_element_by_css_selector("span > input[type= submit]#su").click()
dr.quit()