如何选择定位方式:
1.当页面元素有id属性时且id属性不变,最好尽量用by_id来定位。
2.XPath很强悍,但定位性能不是很好,所以还是尽量少用。如果确实少数元素不好定位,那还是选择XPath或cssSelector。
3.当有链接需要定位时,可以考虑使用by_link_text或by_partial_link_text(推荐)
Selenium官网的Document里极力推荐使用CSS locator
第一步先导入
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
元素定位
根据id定位
driver.find_element_by_id('kw')
根据name定位
driver.find_element_by_name('wd')
根据class定位
driver.find_element_by_class_name('s_ipt')
通过tag_name来定位元素,因为标签不止一个因此常和 find_elements 一起使用
find_elements 返回的是一个列表,列表内是所有满足条件的元素
data = driver.find_elements_by_tag_name('a')
根据超链接的文字进行定位,只能定位链接文本 link_text
driver.find_element_by_link_text('新闻')
通过超链接的部分文本信息进行定位
driver.find_element_by_partial_link_text("新")
xpath元素定位
xpath的语法:
/:表示从根目录开始 (一般不会使用)
//:表示从相对路径开始
@:表示选取属性
1.标签+属性进行xpath定位
//标签名[@属性名=属性值]
例如:定位百度首页的输入框标签
//input[@autocomplete="off"]
2.层级定位
//标签名[@属性名=属性值]/子标签名 只找标签名下面的子标签,不包含更下一层的标签
//标签名[@属性名=属性值]//子标签名 找到该标签名下面所有符合规则的子标签名
3.索引定位 索引从 1 开始 只查找平级标签
//标签名/子标签名[索引值]
例如:定位百度的input标签
//form[@action="/s"]/input[2]
4.模糊匹配
//标签名[contains(@属性名,部分属性值)]
例如:定位百度首页的logo标签
//a[contains(@id,"result_")]
5.多条件查找
//标签名[@属性1=属性值1 and @属性2=属性值2]
例如:定位百度的input标签
//input[@type="hidden" and @name="rn"]
CSS元素定位
导入
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
标签+属性定位
标签名[属性名=属性值]
例如:input[id="kw"]
类选择器: .class名
id选择器: #id值
2.层级
标签名[属性名=属性值] 子标签 包含选择器会选择子标签以及子标签下面的标签
标签名[属性名=属性值]>子标签 只会选择该标签下的子标签
例如:form[id='form'] input
3.索引
标签名[属性名=属性值] :nth-child(索引值) 只要标签名下面是第索引个标签的都会找到
标签名[属性名=属性值]>:nth-child(索引值) 只找标签名下面的第索引个标签
例如:form[id='form']>:nth-child(1)
4.模糊匹配
标签名[属性名*=部分属性值]
例如:input[autocomplete*="of"]
5.多条件查找
标签名[属性名1=属性值1][属性名2=属性值2]
例如:input[type="hidden"][name="f"]语法