当前位置: 代码迷 >> 综合 >> selenium+pycharm+python自动化之八大元素定位
  详细解决方案

selenium+pycharm+python自动化之八大元素定位

热度:78   发布时间:2023-12-17 08:14:39.0

一、八大元素定位

1、使用元素定位的前提:需要定位的元素或它的属性必须唯一。

2、find_element_by_*命令在最新的SeleniumPython库中已被弃用,必须使用find_element()

3、八大元素:

  id、name、link_text、partial_link_text、css_selector、xpath、class_name、tag_name

4、使用方法

①引入By

     from selenium.webdriver.common.by import By
  • 使用idelement = driver.find_element(By.ID, "element_id")
  • 使用nameelement = driver.find_element(By.NAME, "element_name")
  • 使用class_namebutton = driver.find_element(By.CLASS_NAME, "quiz_button")
  • 使用link_textelement = driver.find_element(By.LINK_TEXT, "element_link_text")
  • 使用partial_link_textelement = driver.find_element(By.PARTIAL_LINK_TEXT, "element_partial_link_text")
  • 使用tag_nameelement = driver.find_element(By.TAG_NAME, "element_tag_name")
  • 使用css_selectorelement = driver.find_element(By.CSS_SELECTOR, "element_css_selector")
  • 使用xpathelement = driver.find_element(By.XPATH, "element_xpath")

②语法如下:

  • 使用idelement = driver.find_element(“id”, "element_id")
  • 使用nameelement = driver.find_element("name", "element_name")
  • 使用class_namebutton = driver.find_element("class_name", "quiz_button")
  • 使用link_textelement = driver.find_element("link_text", "element_link_text")
  • 使用partial_link_textelement = driver.find_element("partial_link_text", "element_partial_link_text")
  • 使用tag_nameelement = driver.find_element("tag_name", "element_tag_name")
  • 使用css_selectorelement = driver.find_element("css_selector", "element_css_selector")
  • 使用xpathelement = driver.find_element("xpath", "element_xpath")

5、使用场景

①优先用id、name

②是否是超链接,是超链接用link_text、partial_link_text,否则用css_selector、xpath

class_name、tag_name很少用,因为这俩个难以保证被定为元素或属性的唯一性

6、xpath定位方法

(1)绝对路径:以/开头,从源头标签开始从上到下查找所需元素

(2)相对路径:以//开头

①相对路径+索引定位

//标签名/标签名[有同名标签时,所需标签的序号]/标签名       例://form/span[1]/input

②相对路径+属性定位:搜索标签名下属性为属性名1='属性值1'的标签

//标签名[@属性名1='属性值1']  例://input[@autocomplete='off']

③相对路径+通配符定位

搜索整个网页找到标签里有属性名1='属性值1'的标签

//标签名*[@属性名1='属性值1']  例://input[@autocomplete='off']

搜索整个网页找到标签里有属性值为'属性值1'的标签

//标签名*[@*='属性值1']  例://input[@*='off']

④相对路径+部分属性值定位

搜素属性值以x开头的标签

//*[start-with(@属性名,'x')]  例://*[start-with(@autocomplete,'of')]

搜素属性值以x结尾的标签

//*[substring(@属性名.a,'x')]  例://*[substring(@autocomplete.2,'ff')]

搜素属性值包含x的标签

//*[contains(@属性名,'x')]  例://*[contains(@autocomplete,'ff')]

⑤相对路径+文本定位

//标签名[text()='x')]  例://span[text()='按图片搜索')]

7、css定位方法

1、绝对路径:基本不用

2、通过ID和Class定位

3、通过属性定位

4、通过部分属性定位

5、查询子元素定位

6、查询兄弟节点定位

二、元素定位不到的原因

1、元素没有加载完成

2、元素在Frame中

3、元素不可用、不可读、不可见

4、动态属性、动态的div层

  相关解决方案