前言
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")
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |