> 技术文档 > Python + selenium —— xpath定位方法详解!

Python + selenium —— xpath定位方法详解!


前言

 今天我们来聊聊selenium —xpath定位方法,我们都知道selenium有八大定位策略分别是id、name、class name、tag name、link text、partial link text、xpath、css 。那么我们今天呢主要来讲讲八大定位策略中的xpath的定位方法,废话不多说我们直接开始吧。

一、xpath基本定位用法

  1.1 使用id定位 -- driver.find_element_by_xpath(\'//input[@id=\"kw\"]\')

  1.2 使用class定位 -- driver.find_element_by_xpath(\'//input[@class=\"s_ipt\"]\')

 1.3 当然 通过常用的8种方式结合xpath均可以定位(name、tag_name、link_text、partial_link_text)以上只列举了2种常用方式哦。

二、xpath相对路径/绝对路径定位

  2.1 相对定位 -- 以// 开头 如://form//input[@name=\"phone\"]

 2.2 绝对定位 -- 以/ 开头,但是要从根目录开始,比较繁琐,一般不建议使用 如:/html/body/div/a 


三、xpath文本、模糊、逻辑定位

  3.1【文本定位】使用text()元素的text内容 如://button[text()=\"登录\"]

  3.2 【模糊定位】使用contains() 包含函数 如://button[contains(text(),\"登录\")]、//button[contains(@class,\"btn\")] 除了contains不是=等于 多用于display属性

 3.3 【模糊定位】使用starts-with -- 匹配以xx开头的属性值;ends-with -- 匹配以xx结尾的属性值 如://button[starts-with(@class,\"btn\")]、//input[ends-with(@class,\"-special\")]

  3.4 使用逻辑运算符 -- and、or;如://input[@name=\"phone\" and @datatype=\"m\"]

四、xpath轴定位

  4.1 轴运算

  ancestor:祖先节点 包括父
  parent:父节点
  preceding-sibling:当前元素节点标签之前的所有兄弟节点
  preceding:当前元素节点标签之前的所有节点

  following-sibling:当前元素节点标签之后的所有兄弟节点

  following:当前元素节点标签之后的所有节点

  使用语法: 轴名称 :: 节点名称

  使用较多场景:页面显示为一个表格样式的数据列

  如:

注意:


  1. #定位 找到元素 -- 做到唯一识别

  2. #优先使用id

  3. #舍弃:有下标的出现、有绝对定位的出现、id动态变化时舍弃


  1. from selenium import webdriver

  2. import time

  3. from selenium.webdriver.support.wait import WebDriverWait

  4. from selenium.webdriver.support import expected_conditions as EC

  5. from selenium.webdriver.common.by import By

  6. driver = webdriver.Chrome()

  7. driver.get(\"https://www.baidu.com/\")

  8. driver.maximize_window()

  9. time.sleep(3)

  10. # 定位百度搜索框

  11. driver.find_element_by_id(\"kw\").send_keys(\"python\")

  12. time.sleep(3)

  13. driver.find_element_by_id(\"su\").click()

  14. time.sleep(5)

  15. # 找到这个元素

  16. ele = driver.find_element_by_xpath(\'//a[text()=\"_百度百科\"]\')

  17. # 拖动元素到可见区域--scrollIntoView() 拉到顶部显示,有可能会被导航栏遮挡,定位不到而报错;scrollIntoView(false)可视区域底部对齐

  18. driver.execute_script(\"arguments[0].scrollIntoView(false);\", ele)

  19. time.sleep(5)

  20. driver.quit()

定位后的常见操作

get(url) 打开网页

send_keys(str) 输入

click() 点击

clear() 清空

text 获取标签文本内容

get_attribute(\'属性\') 获取元素属性值

close() 关闭当前标签页

quit() 关闭浏览器,释放进程

FAQ

  1. 脚本结束如果没有调用quit()方法,chromedriver进程会在后台继续运行。大概占用4M空间。如果创建多了不关,会导致电脑卡。

__import__(\'os\').system(\"taskkill /f /t /im chromedriver.exe\")

 如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】