selenium+python自动化,元素定位

webdriver 提供了八种元素定位方法:
  •  id

  •  name

  •  class name

  •  tag name

  •  link text

  •  partial link text

  •  xpath

  •  css selector

  • Python 语言中对应的定位方法如下:

  • find_element_by_id()

  • find_element_by_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()

1.使用xpath定位:

1)绝对路径:

find_element_by_xpath()方法用于 XPath 语言定位元素。XPath 的绝对路径主要用标签名的层级关系来 定位元素的绝对路径。最外层为 html 语言,body 文本内,一级一级往下查找,如果一个层级下有多个相 同的标签名,那么就按上下顺序确定是第几个,div[2]表示第二个 div 标签。

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

2)利用元素属性定位

//表示当前页面某个目录下,input 表示定位元素的标签名,[@id='kw'] 表示这个元素的 id 属性值等于 kw
如果不想指定标签名也可以用星号(*)代替。当然,使用 XPath 不仅仅只局限在 idname class 这 三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。

例:

find_element_by_xpath("//input[@id='kw']")
find_element_by_xpath("//input[@id='wd']")

find_element_by_xpath("//input[@class='s_ipt']")

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

 3)层级与属性结合:

例:browser.find_element_by_xpath("//*[@id='main']/div[1]/ul/li[2]/a").click()

4)使用逻辑运算符:

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

2.css定位:

1)通过class属性定位:

find_element_by_css_selector()方法用于 CSS 语言定位元素,点号(.)表示通过 class 属性来定位元素。

如:browser.find_element_by_css_selector(".right_more")

2)通过 id 属性定位:

井号(#)表示通过 id 属性来定位元素。

例:find_element_by_css_selector("#kw")

3)通过标签名定位:

CSS 语言中用标签名定位元素不需要任何符号标识,直接使用标签名即可,但我们前面已经了解到 标签名重复的概率非常大,所以通过这种方式很难唯一的标识一个元素。

 4)通过父子关系定位:

find_element_by_css_selector("span>input")
5)通过属性定位:

find_element_by_css_selector("input[autocomplete='off']")

find_element_by_css_selector("input[maxlength='100']")

find_element_by_css_selector("input[type='submit']")

CSS 当中也可以使用元素的任意属性,只要这些属性可以唯一的标识这个元素。

6)组合定位:

find_element_by_css_selector("span.bg s_ipt_wr>input.s_ipt")

find_element_by_css_selector("span.bg s_btn_wr>input#su")

有一个父元素,它的标签名叫 span,它有一个 class 属性值叫 bg s_ipt_wr,它有一个子元素,标签名 叫 input,并且这个子元素的 class 属性值叫 s_ipt

3.用 By 定位元素

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

from selenium.webdriver.common.by import By
例:
find_element(By.ID,"kw")

find_element(By.NAME,"wd")

find_element(By.CLASS_NAME,"s_ipt")

find_element(By.TAG_NAME,"input")

find_element(By.LINK_TEXT,u"新闻")

find_element(By.PARTIAL_LINK_TEXT,u"")

find_element(By.XPATH,"//*[@class='bg s_btn']")

find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")   

4.定位一组对象

定位一组对象的方法与定位单个对象的方法类似,唯一的区别是在单词 element 后面多了一个 s 表示 复数。定位一组对象一般用于以下场景:

1)批量操作对象,比如将页面上所有的复选框都被勾选。

2)先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个。
例:
checkboxs=driver.find_elements_by_xpath("//input[@type='checkbox']")
for checkbox in checkboxs:
checkbox.click()
pop() 函数用于获取列表中的一个元素(默认为最后一个元素),并且返回该元素 的值。

driver.find_elements_by_css_selector('input[type=checkbox]').pop().click()

pop()pop(-1)默认获取一组元素中的最后一个
pop(0) 默认获取一组元素中的第一个
pop(1)
 
 
 
原文地址:https://www.cnblogs.com/zoeya/p/6548949.html