二、selenium选取元素

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 # + 哥哥找弟弟


版权声明:本文为cuixin1108原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。