python - selenium.common.exceptions.WebDriverException:消息:通过 Python 使用 Selenium 与 ChromeDriver 和 Chrome 的会话 ID 无效
问题描述
我正在使用 Selenium 编写一些代码,并且有一次我向不同的网站发出 7 个请求。对于第一个,这很好用。但是,对于其他人,我收到会话 ID 错误。我认为我的浏览器配置正确,因为我确实从第一个网站获得了结果。我试图在请求之间放置一个 WebDriverWait,但无济于事。我认为这些网站可能会阻止我的请求。有谁知道如何解决这个问题?
如果这是愚蠢的事情或者我做错了什么,我很抱歉,我是新手^^
提前致谢!
Traceback (most recent call last):
File "/home/cena/PycharmProjects/Frikandelbroodje/main.py", line 56, in <module>
dirk_price = get_price(dirk_url, dirk_classname)
File "/home/cena/PycharmProjects/Frikandelbroodje/main.py", line 44, in get_price
browser.get(url)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 333, in get
self.execute(Command.GET, {'url': url})
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: invalid session id
(Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Linux 4.15.0-50-generic x86_64)
解决方案
无效的会话 ID
无效会话 ID错误是当服务器无法识别唯一会话标识符时发生的WebDriver 错误。如果会话已被删除或会话 ID 无效,则会发生这种情况。
可以通过以下任一方式删除 WebDriver 会话:
显式会话删除:当显式调用
quit()
方法时,WebDriver 会话被显式删除,如下所示:代码块:
from selenium import webdriver from selenium.common.exceptions import InvalidSessionIdException driver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe') print("Current session is {}".format(driver.session_id)) driver.quit() try: driver.get("https://www.google.com/") except Exception as e: print(e.message)
控制台输出:
Current session is a9272550-c4e5-450f-883d-553d337eed48 No active session with ID a9272550-c4e5-450f-883d-553d337eed48
隐式会话删除:当您关闭最后一个窗口或选项卡调用
close()
方法时,会隐式删除 WebDriver 会话,如下所示:代码块:
driver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe') print("Current session is {}".format(driver.session_id)) # closes current window/tab driver.close() try: driver.get("https://www.google.com/") except Exception as e: print(e.message)
控制台输出:
Current session is a9272550-c4e5-450f-883d-553d337eed48 No active session with ID a9272550-c4e5-450f-883d-553d337eed48
结论
由于第一个请求工作正常,但对于其他请求,您会收到会话 ID错误,很可能是WebDriver控制的Web 浏览器被检测到,因此阻止了下一个请求。
WebDriver控制的Web 浏览器被检测到并同时被阻止有不同的原因。您可以在以下位置找到一些详细的讨论:
推荐阅读
- javascript - 在谷歌饼图图例上显示值而不是百分比
- php - 调试时停止 PhpStorm 打开文件
- scala - Akka Stream Kafka:找不到关键“kafka-clients”的配置设置
- angular - Angular 6 管道操作从 observable 中移除类型
- django - 带有内联/嵌套数据的 Django 表单
- python - 将加密和解密从 Node.js 移动到 python
- dart - 如何获取“材料下拉选择”以显示当前模型值
- mysql - 如何在外部为 MySQL 创建密码哈希?
- javascript - React: Uncaught TypeError: this.state.data.map is not a function and
- javascript - jQuery.html() 插入输入字段在 IE11 中不起作用