通过Selenium Webdriver 所提供的各种方法来定位元素

webdriver 提供了八种元素定位方法: id、 name、 class name、 tag name、 link text、 partial link text、 xpath、 css selector

对应到Python中的方法为:

find_element_by_id(“xx”)

find_element_by_name(“xx”)

find_element_by_class_name(“xx”)

find_element_by_tag_name(“xx”)

find_element_by_link_text(“xx”)

find_element_by_partial_link_text(“xx”)

find_element_by_xpath(“xx”)

find_element_by_css_selector("xx")

下面着重讲一下后两种方法的使用:

find_element_by_xpath(“xx”)

1.绝对路径定位:主要用标签名的层级关系来定位元素的绝对路径(如果一个层级下有多个相同的标签名,那么就按上下顺序确定是第几个,div[2]表示第二个 div 标签)

如:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")

2.利用元素属性定位

find_element_by_xpath("//input[@id='kw']") //表示当前页面某个目录下,input 表示定位元素的标签名,[@id='kw'] 表示这个元素的 id 属性值等于kw。

如果不想指定标签名也可以用星号(*)代替,

如:find_element_by_xpath("//*[@class='bg s_btn']")

使用 XPath 不仅仅只局限在 id、name 和 class 这三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素

如 :find_element_by_xpath("//input[@maxlength='100']")

3.层级与属性结合:如果一个元素本身并没有可以唯一标识这个元素的属性值,我们可以找其上一级元素

事例代码如下

.....
<form id="form" class="fm" action="/s" name="f">
  <input type="hidden" value="utf-8" name="ie">
  <input type="hidden" value="8" name="f">
  <input type="hidden" value="1" name="rsv_bp">
  <input type="hidden" value="1" name="rsv_idx">
  <input type="hidden" value="" name="ch">
  <input type="hidden" value="02.." name="tn">
  <input type="hidden" value="" name="bar">
  <span class="bg s_ipt_wr">
          <input id="kw" class="s_ipt" autocomplete="off"
                 maxlength="100" value="" name="wd">
   </span>
  <span class="bg s_btn_wr">
                <input id="su" class="bg s_btn" type="submit"
                         value="百度一下">
   </span>
......

如:find_element_by_xpath("//span[@class='bg s_ipt_wr']/input")//span[@class='bg s_ipt_wr'] 通过 class 属性定位到是父元素,后面/input 也就表示父元素下面标签名为input 的子元素

也可以找上上一级,如:  find_element_by_xpath("//form[@id='form']/span[2]/input")

4.使用逻辑运算符:如果一个属性不能唯一的区分一个元素,我们还可以使用逻辑运算符连接多个属性来区别于其它属性。

事例代码如下

<input id="kw" class="su" name="ie">
<input id="kw" class="aa" name="ie">
<input id="bb" class="su" name="ie">

要定位到第一行,可以通过逻辑运算符号连接 

find_element_by_xpath("//input[@id='kw' and @class='su']/span/input")

find_element_by_css_selector("xx"):CSS(Cascading Style Sheets)是一种语言,它被用来描述 HTML 和 XML 文档的表现。CSS 使用选择器来为页面元素绑定属性

CSS 选择器的常见语法如下:

事例代码如下:

.....
<span class="bg s_ipt_wr">
         <input id="kw" class="s_ipt" autocomplete="off"
                    maxlength="100" value="" name="wd">
</span>
<span class="bg s_btn_wr">
                      <input id="su" class="bg s_btn" type="submit"
                 value="百度一下">
</span>
.....

1.通过class属性定位:

find_element_by_css_selector(".s_ipt")     //(.)表示通过class属性定位元素

2.通过ID属性定位:

find_element_by_css_selector("#kw")     //(#)表示通过ID属性定位元素

3.通过父子关系定位:

find_element_by_css_selector("span>input")   //查找span下的input元素

4.通过属性定位:

find_element_by_css_selector("input[maxlength='100']")   //这些属性是唯一的就行

5.组合定位:

find_element_by_css_selector("span.bg s_ipt_wr>input.s_ipt")  //父元素标签叫span,他的class属性叫bg s_ipt_wr,找其下的标签input,class属性为s_ipt的元素

再讲一种很方便的定位方法 用By定位元素

需要先导入库  from selenium.webdriver.common.by import By

使用find_element()方法只用于定位元素。它需要两个参数,第一个参数是定位方式,这个由 By 提供;另第二个参数是定位的值

find_element(By.ID,"kw")//定位ID为“kw”的

find_element(By.NAME,"wd")定位name为“wd”的

find_element(By.CLASS_NAME,"s_ipt")定位class_name为“s_ipt”的

find_element(By.TAG_NAME,"input")定位tag_name为“input”的

find_element(By.LINK_TEXT,u"新闻")定位链接文本为“新闻”的        注:加 u 的作用是把中文字符串转换中 unicode 编码

find_element(By.PARTIAL_LINK_TEXT,u"新")定位链接部分内容为“新”的

find_element(By.XPATH,"//*[@class='bg s_btn']")定位当前目录下class属性为bg s_btn的元素

find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")定位父span标签为bg s_btn_wr的元素,找到其子元素input标签为su的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值