ToB企服应用市场:ToB评测及商务社交产业平台
标题:
[selenium]元素定位
[打印本页]
作者:
写过一篇
时间:
2022-8-9 14:42
标题:
[selenium]元素定位
前言
selenium提供八种元素定位的方法:
find_element_by_id(): 通过id定位。一个页面中的id是唯一的。有id的话尽量使用id定位。
find_element_by_xpath(): 通过xpath语法定位(常用)
find_element_by_link_text(): 通过链接文本定位
find_element_by_partial_link_text(): 通过部分链接文本定位
find_element_by_name(): 通过标签名称定位
find_element_by_tag_name(): 通过标签名称定位
find_element_class_name(): 通过class name定位
find_element_by_css_selector(): 通过css选择器(常用)
当前selenium版本(v4.1.5)更推荐使用find_element(by=By.xx, value="")的方式
通过ID定位元素
按照W3C的规范,元素的ID在页面上是唯一的,因此元素如有ID,通过ID去定位一般是最方便的,也是最快的。
但是,浏览器允许元素没有ID或者ID不唯一,所以还需要综合利用其它方法去定位元素。
示例
from selenium.webdriver.common.by import By
# 点击id为123456的元素
driver.find_element(by=By.ID, value="123456").click()
复制代码
通过name属性定位元素
元素的name属性是常用的一种定位锚点,但是需要注意,页面上name属性的值不一定是唯一的。
假设元素的网页源代码为:
[/code]定位方式:
[code]from selenium.webdriver.common.by import By
# 定位name属性为next的元素,然后输入123456
driver.find_element(by=By.NAME, value="next").send_keys("123456")
复制代码
通过XPATH定位元素
xpath是xml页面中定位元素的一种方法,在html中也适用。通过xpath可以定位到绝大部分元素。xpath语法需要花大概十几分钟时间简单学习下。
W3C School - xpath在线文档
假设元素的网页源代码为:
[/code]定位方式:
[code]from selenium.webdriver.common.by import By
# 通过相对路径定位属性namee为next、属性type为submit的input元素
# 然后输入123456
driver.find_element(by=By.XPATH, value="//input[@name='next' and @type='submit']").send_keys("123456")
复制代码
xpath基本概念
父子节点
绝对路径和相对路径
xpath方法:
contains()
text()
starts-with()
示例
from selenium.webdriver.common.by import By
# 根据页面文字定位元素
driver.find_element(by=By.XPATH, value="//span[contains(text(), '资金业务系统')]").click()
复制代码
通过css选择器定位元素
css选择器和xpath都可以定位复杂的页面元素,但是css选择器不依赖DOM。当页面集成了很多的CSS元素,CSS选择器的性能比xpath要更好。
# 基本语法
driver.find_element(by=By.CSS_SELECTOR, value='')
# 定位标签为p,id为press的元素
# <p id="press"></p>
value='p#press'
## 或者
value="p[id='press']"
## 或者
value="p#id='press'"
# 定位标签为p,标签文本包含press的元素
# <p>press</p>
value="p:contains('press')"
# 定位多属性的元素
# <p class ="container" id="apress" ></p>
value="[class='container'][id='apress'][style='align-self:center']"
# 定位子元素
#
# <a target="_blank" href="https://www.cnblogs.com/#aston_martin">Aston</a>
#
value="div#cars a"
# 多子元素中定位
# <ul id="cars">
# <li>Aston Martin</li>
# <li>BMW</li>
# <li>Chevy</li>
# <li>Dodge</li>
# </ul>
# 定位第二个li
value="ul#cars li:nth-of-type(2)"
# 定位最后一个li
value="ul#cars li:last-child"
复制代码
通过锚标签定位元素
假设网页源代码为:
<a target="_blank" href="https://www.cnblogs.com/python.html">Python</a>
复制代码
定位方法:
driver.find_element(by=By.LINK_TEXT, value="Python").click()
复制代码
通过部分锚标签定位元素
driver.find_element(by=By.PARTIAL_LINK_TEXT, value="Pyt").click()
复制代码
通过tag定位元素
假设需要定位网页标题
elem1 = driver.find_element(by=By.TAG_NAME, value="Title")
复制代码
通过class名定位元素
假设元素的网页源代码为:
<p >Python with Selenium</p>
复制代码
定位方式:
elem = driver.find_element(by=By.CLASS_NAME, value="text-justify")
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4