Selenium通过文本定位并且实现操作
背景
对于Selenium初学者来说,定位方式采用精准定位作为简单也就是通过获取精准的位置信息进行定位。例如:
//*[@id="s-top-left"]/a[1]
,通过语句
driver.find_element(By.XPATH,'//*[@id="s-top-left"]/a[1]')
即可以精准的进行定位元素,但是此场景只针对这一个页面,也就是说类似的并不通用并且当页面发生小规模改动时,也会对定位结果产生影响。这时候我们就可以考虑通过文本去定位元素,当然文本要保证唯一性才能进行下步操作(单单获取信息那就不必考虑这么多了)。
语法
在实现这个功能时我们采用两种方式,一个是精准定位文本,意思就是说文本信息全部匹配才能返回正确值:
driver.find_element(By.XPATH, "//a[text()='新闻']")
,但是通常我们使用时并不需要非常精准,这样反而会给我们自己造成困扰,因此我们会采用模糊匹配进行定位:
driver.find_element(By.XPATH, "//*[contains(text(),'新闻')]")
,这样只要部分匹配即可以输出结果。
验证
我们以百度为例,代码如下:
mport time
from selenium import webdriver
from selenium.webdriver.common.by import By
# 请求网址
url ='https://www.baidu.com/'# 实例化
driver = webdriver.Chrome()# 获取该网址信息
driver.get(url)# 模糊匹配,通过文本定位信息
content = driver.find_element(By.XPATH,"//*[contains(text(),'新闻')]")# 完全匹配# content=driver.find_element(By.XPATH, "//a[text()='新闻']")# 输出定位结果print(content.text)# 关闭浏览器
driver.close()
最终得出的结果为:
D:\pythonProject\venv\Scripts\python.exe D:\pythonProject\venv\csdn.py
新闻
Process finished with exit code 0
往往返回结果并不是我们想要的,我们只是为了定位元素,然后进行下一步操作,如下我做了一个点击的操作,那么他就可以实现页面跳转功能:
content = driver.find_element(By.XPATH,"//*[contains(text(),'新闻')]").click()
结果为:
总结
对于比较复杂的场景,只能知道自己想定位什么文本,却不知道怎么定位到这个地址的时候,我们可以采用这种方法进行实现。愿对你有所帮助!
版权归原作者 小小狒狒君 所有, 如有侵权,请联系我们删除。