1.id定位
HTML规定id属性在HTML文档中必须是唯一的。
如:
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
find_element_by_id("kw")
2.name定位
HTML规定name属性指定元素名称,在当前页面可以不唯一。
如:
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
find_element_by_name("wd")
3.class定位
HTML规定class指定元素类名。
如:
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
find_element_by_class_name("s_ipt")
4.tag定位
HTML本质是通过tag来定义实现不同的功能,每个元素本质是一个tag。因tag用来定义一类功能,所以通过tag识别某个元素概率很低。
find_element_by_tag_name("input")
find_element_by_tag_name("div")
find_element_by_tag_name("a")
5.link定位
专门用来定位文本链接。如:
find_element_by_link_text("新闻")
find_element_by_link_text("hao123")
find_element_by_link_text("地图")
6.partial link定位
是对link定位的补充,有些链接很长,我们可以通过这个定位取文本链接的一部分。
如:
<a class="aaa" name="bbb" href="#">你好啊,我有一条很长名称的文本链接</a>
find_element_by_partial_link_text("你好啊")
find_element_by_partial_link_text("很长名称")
find_element_by_partial_link_text("文本链接")
7.XPath定位
XPath是一种在XML文档中定位元素的语言。HTML可看作XML的一种实现。
7.1绝对路径定位
黏贴:/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input
find_element_by_xpath("/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input")
7.2元素属性定位
如:
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
find_element_by_xpath("//input[@id='kw']")
//表示当前页面某个目录下
input表示定位元素的标签名
[@id='kw']表示这个元素的id属性值等于kw
---还可以通过name和class属性来定位,其他任意属性都可以使用。
find_element_by_xpath("//input[@name='wd']")
find_element_by_xpath("//input[@class='s_ipt']")
find_element_by_xpath("//*[@name='wd']")
注:不想指定标签名,可以用*号代替。
7.3层级与属性结合定位
如果一个元素没有唯一标识的属性值,可以找上一级元素可以唯一标识的属性值使用。
假设输入框没有唯一标识的属性值,我们可以查找它上一级属性。
find_element_by_xpath("//span[@id='s_kw_wrap']/input")
find_element_by_xpath("//span[@class='bg s_ipt_wr new-pmd quickdelete-wrap']/input")
或者再往上级找:
find_element_by_xpath("//form[@id='form']/span/input")
或者找第二个span的input(百度一下按钮):
find_element_by_xpath("//form[@id='form']/span[2]/input")
7.4使用逻辑运算符
......
<input id="kw" class="su" name="ie">
<input id="kw" class="aa" name="ie">
<input id="bb" class="su" name="ie">
........
如上代码通过id或class属性去定位元素都会存在重复。
如果一个属性不能唯一区分一个元素,我们可以使用逻辑运算符“and”来连接两个条件去定位元素。
find_element_by_xpath("//input[@id='kw' and class='su']/span/input")
8.CSS定位
CSS(Cascading Style Sheets)是一种语言,用来描述HTML和XML文档的表现。CSS使用选择器来为页面元素绑定属性。
8.1通过class属性定位
.号表示通过class属性来定位元素
find_element_by_css_selector(".s_ipt")
find_element_by_css_selector(".btn self-btn bg s_btn")
8.2通过id属性定位
#号表示通过id属性来定位元素
find_element_by_css_selector("#kw")
find_element_by_css_selector("#su")
8.3通过标签名定位
不需要任何符号标识。
find_element_by_css_selector("input")
或通过父子关系定位
find_element_by_css_selector("span>input")
或通过属性定位
find_element_by_css_selector("[name='kw']")
find_element_by_css_selector("[type='submit']")
或组合定位
find_element_by_css_selector("form.fm>span#s_kw_wrap>input.s_ipt")