标签:el 以后 Chrome selenium send 升级 selenium4 input browser
最近 selenium 进行了一个更新,官网宣传有比较大的更新, 于是我毫不犹豫的着手升级,没想到直接掉坑里了...现在我们来还原一下整个操作过程。
我之前的 selenium 版本是 3.14.0,在 Python 升级 selenium 很简单,只需要一行命令就可以搞定。
pip install -U selenium
升级完成之后,可以通过 pip show selenium 查看最新版本是 4.1.0。到目前为止,一切都很好,尽在掌握中。
接下来,我把之前的自动化测试代码拿出来,重新用新的 selenium 版本运行一下。代码很简单,就是在百度主页搜索了"永别了武器"几个字。
from selenium import webdriver def test_01(): with webdriver.Chrome() as browser: browser.get("http://www.baidu.com") input_el = browser.find_element(By.XPATH, '//input[@id="kw"]') input_el.send_keys('永别了武器')
坑来了,直接报错。同一份代码,在 selenium3 中完美运行。升级到 selenium4 之后,虽然元素能正常找到,但是调用 send_keys 方法,会报错,报错信息为 dict 没有 send_keys 方法。也就是说,find_element 方法返回的是一个字典对象,不是官方定义的 WebElement 对象。
直接打印 input_el,得到的真的是一个字典:
{'ELEMENT': '0.5678200594548724-1'}
查看 find_element 方法的源码注释,确实是 WebElement 对象,官方说明和实际运行结果不匹配。
盲猜是驱动不兼容导致的,下载最新的 chromedriver 驱动,保存到本地,在初始化浏览器对象时指定驱动路径:
webdriver.Chrome(executable_path='chromedriver_95.exe')
程序果然正常运行了,但是报了一个警告信息,大家盲猜一下啥意思。
翻译一下:Chrome 类中的 executable_path 参数在最新的 selenium4 中已经被移除了,需要传入 Service 对象,阅读官方文档可以看到相关说明。
修改后的代码就是正确的打开方式了:
def test_01(): service = Service(executable_path='chromedriver_95.exe') with webdriver.Chrome(service=service) as browser: browser.get("http://www.baidu.com") input_el = browser.find_element(By.XPATH, '//input[@id="kw"]') input_el.send_keys('永别了武器')
之前的 selenium, 在 Chrome 类中同时管理 Service 类和 Connection 客户端类。 更新之后,service 提取出去,Chrome 类的职责单一了,结构更加清晰,以前老的教程估计又要淘汰一批。
标签:el,以后,Chrome,selenium,send,升级,selenium4,input,browser 来源: https://blog.csdn.net/ningmengban/article/details/122514976
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。