selenium定位方法
Selenium提供了8种定位方式。
id
name
class name
tag name
link text
partial link text
xpath
css selector
这8种定位方式在Python selenium中所对应的方法为:
find_element_by_id() #根据id
find_element_by_name() #根据标签属性name选择
find_element_by_class_name() #根据类名
find_element_by_tag_name() #根据标签名
find_element_by_link_text() #根据超链接
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
定位方法的用法
假如我们有一个Web页面,通过浏览器F12工具查看到一个元素的属性是这样的。
<html>
<head>
<body link="#0000cc">
<a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})">
<form id="form" class="fm" name="f" action="/s">
<span class="soutu-btn"></span>
<input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
我们的目的是要定位input标签的输入框。
通过id定位:
dr.find_element_by_id(“kw”)
通过name定位:
dr.find_element_by_name(“wd”)
通过class name定位:
dr.find_element_by_class_name(“s_ipt”)
通过tag name定位:
dr.find_element_by_tag_name(“input”)
通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@class='s_ipt']")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
dr.find_element_by_xpath("//form[@id='form']/span/input")
dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")
通过css定位,css定位有N种写法,这里列几个常用写法:
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")
接下来,我们的页面上有一组文本链接。
<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
<a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>
通过link text定位:
dr.find_element_by_link_text(“新闻”)
dr.find_element_by_link_text(“hao123”)
通过link text模糊定位:
dr.find_element_by_partial_link_text(“新”)
dr.find_element_by_partial_link_text(“hao”)
dr.find_element_by_partial_link_text(“123”)
关于xpaht和css的定位比较复杂,请参考:
selneium实现对页面元素的操作
对象是页面的元素
对web页面,html组成有所了解
xpath
基于路径的法则进行元素的查找,遍历方法进行元素的搜索
基本语法
路径 - 绝对路径(/html/body/div/div/div),相对路径(//div//span)
@ - 表述标签属性 - //div//span[@class="sr-only"]
text() - 他就是方法,或者叫函数 //div//span[text()="菜单"]
[] - 过滤功能,下标,按照范围,是什么, 下标位置从1开始 - //div[1]
通配符 * - //*//span[@class="sr-only"]
模糊匹配 - contains() -//*//span[contains(@class, "only")],
. - 当前路径
.. - 向上一级
//label[text()="请输入密码:"]/following-sibling::input 通过哥哥找弟弟
//input[@id="password"]/preceding-sibling::label 通过弟弟找哥哥
遵循规则 - 首先在页面中找到目标元素,依目标元素为中心,进行雷达是搜索,找出可以帮助定位元素的唯一的页面元素以及数据
CSS语法
. 表示 class/属性
表示 id
标签名字 表示标签
xpath css
//div[@name=“username”] div[name=username]
div[name^=user] # 以user开头
div[name$=name] # 以name结尾
div[name*=rna] # 有 rna这个字母就可以
//ul[@id=“idnum”]/* ul#idnum>* # >表示紧挨着, ul的子元素
//ul[@id=“idnum”]//p ul#idnum p # 有间隔子子孙孙,下面所有的p元素
//div[4] div:nth-child(4) # 下标用法
//input[@name=“w”]/following-sibling::input input+input # + 哥哥找弟弟