selenium 常见方法和页面元素的操作

欢迎加入学习交流QQ群:657341423


selenium总共有八种定位方法
By.id() 通过id定位
By.name() 通过name 定位
By.xpath() 通过xpath定位
By.className() 通过className定位
By.cssSelector() 通过CSS 定位
By.linkText() 通过linkText
By.tagName() 通过tagName
By.partialLinkText() 通过匹到的部分linkText

其中用得最多的是xpath,cssSelector,而且用这两种定位,基本上可以解决大部分网页定位困难,至于id,name有时候不能适用于网页,这个具体情况还是看网页Html怎样设计的。

XPath-利用元素属性定位

find_element_by_xpath("//input[@id=‘kw’]")

find_element_by_xpath("//input[@name=‘wd’]")

find_element_by_xpath("//*[@id=‘kw’]")

//input表示查找页面上所有的input元素

*//表示查找页面上所有元素

//input[1]表示查找页面上第一个input元素

//form[1]/input 表示查找第一个form元素下一级的input元素

//form[1]//input 表示查找页面上第一个form元素下的所有input元素,不管嵌套了多少层

//input[@id=‘kw’ and @class=‘su’] 可以用 and 连接多个属性来唯一标识一个元素

查找页面根元素://

查找页面上所有的input元素://input

查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示,单/号)://form[1]/input

查找页面上第一个form元素内的所有子input元素(只要在form元素内的input都算,不管还嵌套了多少个其他标签,使用相对路径表示,双//号)://form[1]//input

查找页面上第一个form元素://form[1]

查找页面上id为loginForm的form元素://form[@id=‘loginForm’]

查找页面上具有name属性为username的input元素://input[@name=‘username’]

查找页面上id为loginForm的form元素下的第一个input元素://form[@id=‘loginForm’]/input[1]

查找页面具有name属性为contiune并且type属性为button的input元素://input[@name=‘continue’][@type=‘button’]

查找页面上id为loginForm的form元素下第4个input元素://form[@id=‘loginForm’]/input[4]

常见的cssSelector的定位方式:

定位id为flrs的div元素,可以写成:#flrs 注:相当于xpath语法的//div[@id=’flrs’]

定位id为flrs下的a元素,可以写成 #flrs > a 注:相当于xpath语法的//div[@id=’flrs’]/a

定位id为flrs下的href属性值为/forexample/about.html的元素,可以写成: #flrs > a[href=”/forexample/about.html”]

如果需要指定多个属性值时,可以逐一加在后面,如#flrs > input[name=”username”][type=”text”]。

*此外,cssSelector还有一些高级用法,如果熟练后可以更加方便地帮助我们定位元素,如我们可以利用^用于匹配一个前缀,$用于匹配一个后缀,用于匹配任意字符。例如:

匹配一个有id属性,并且id属性是以”id_prefix_”开头的超链接元素:a[id^=‘id_prefix_’]

匹配一个有id属性,并且id属性是以”_id_sufix”结尾的超链接元素:a[id$=’_id_sufix’]

匹配一个有id属性,并且id属性中包含”id_pattern”字符的超链接元素:a[id*=‘id_pattern’]

通过class属性定位
find_element_by_css_selector(".类属性值") class选择器选择class="a"的所有元素,点号(.)表示通过class属性定位元素
driver.find_element_by_css_selector(".s_ipt").send_keys(“css”)
driver.find_element_by_css_selector(".bg s_btn").click()
通过id定位元素
find_element_by_css_selector("#id值") id选择器选择id="a"的所有元素,#号表示通过id属性定位元素
driver.find_element_by_css_selector("#kw").send_keys(“huh”)
driver.find_element_by_css_selector("#su").submit()
通过标签名定位元素(少用)
find_element_by_css_selector(“input”)
通过标签属性定位
find_element_by_css_selector("[属性名=属性值]")
driver.find_element_by_css_selector("[ maxlength=‘255’]").send_keys(“dfaf”)
driver.find_element_by_css_selector("[ value=‘百度一下’]").submit()
对于属性值来说,可加引号,也可以不加,但注意和整个字符串的引号进行区分!!!
通过标签父子关系定位(少用吧)
find_element_by_css_selector(“父标签>子标签”)
find_element_by_css_selector(“span>input”)表示选择父标签为span的所有input元素
组合定位(通过父子标签和其属性结合)
组合定位可以大大加强定位元素的唯一性!
driver.find_element_by_css_selector(“form#form>span>input”).send_keys(“asfa”)
driver.find_element_by_css_selector(“form#form>span>input#su”).click()
要定位的元素是input,父元素是span,爷元素是form;
要定位的元素是input(可以结合它的属性值),父元素是span,爷元素是form(可以结合它的属性值)
其实通过css定位也可以像xpath定位那样通过firebug工具获得再修改,或选择要定位的标签后右键-》复制css路径也行。

各种方式在选择的时候应该怎么选择:

  1. 当页面元素有id属性时,最好尽量用id来定位。但由于现实项目中很多程序员其实写的代码并不规范,会缺少很多标准属性,这时就只有选择其他定位方法。

  2. xpath很强悍,但定位性能不是很好,所以还是尽量少用。如果确实少数元素不好定位,可以选择xpath或cssSelector。

  3. 当要定位一组元素相同元素时,可以考虑用tagName或name。

  4. 当有链接需要定位时,可以考虑linkText或partialLinkText方式。


欢迎加入学习交流QQ群:657341423

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xy-Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值