chromedriver驱动的浏览器和真实浏览器之间的差异

1|0一. 打印百度首页底部的声明


如图,想打印@2018 Baidu...后面的一长串文字,可以通过class name定位的形式

可以看出,只有一个class name是"copyright-text"的元素

2|0二. 代码实现


from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") time.sleep(2) #class="copyright-text" 元素的文本信息 data = driver.find_element_by_class_name("copyright-text").text #打印信息 print(data) time.sleep(3) driver.quit()

运行结果报错了:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:

大意是元素定位失败,找不到class为"copyright-text"的元素

D:\Program\python34\python.exe D:/python_workshop/python6/selenium_webdriver/test_9.py Traceback (most recent call last): File "D:/python_workshop/python6/selenium_webdriver/test_9.py", line 11, in <module> data = driver.find_element_by_class_name("copyright-text").text File "D:\Program\python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 555, in find_element_by_class_name return self.find_element(by=By.CLASS_NAME, value=name) File "D:\Program\python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 955, in find_element 'value': value})['value'] File "D:\Program\python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 312, in execute self.error_handler.check_response(response) File "D:\Program\python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"copyright-text"} (Session info: chrome=66.0.3359.139) (Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 6.1.7600 x86_64) Process finished with exit code 1

3|0三. 原因分析


检查chromedriver驱动的浏览器,发现百度首页底部的那一串声明竟然跑到下一行去了,而且是id="cp",用的是id选择器而非class,看来驱动浏览器和真实浏览器同一地方的元素、属性可能会有差异,此时需要修改代码了

4|0四. 修改代码和总结


from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") time.sleep(2) #class="copyright-text" 元素的文本信息 data = driver.find_element_by_id("cp").text #修改部分 #打印信息 print(data) time.sleep(3) driver.quit()

运行结果:

©2018 Baidu 使用百度前必读 意见反馈 京ICP证030173号 京公网安备11000002000001号

4|1总结:如果发现定位不到元素,应该第一时间检查驱动浏览器相同地方的元素和属性,和真实浏览器做对比


 


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/9224671.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(1216)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2017-06-25 《Advanced Bash-scripting Guide》学习(六):从/etc/fstab中读行
点击右上角即可分享
微信分享提示