selenium.common.exceptions.WebDriverException:消息:将Selenium与ChromeDriver和Chrome通过Python结合使用时,无效的会话ID
我正在使用Selenium编写一些代码,有一次我向不同的网站提出了7个请求.对于第一个,这很好.但是,对于其他人,我得到一个会话ID错误.我认为我的浏览器配置正确,因为我确实从第一个网站获得了结果.我试图将WebDriverWait放在请求之间,但无济于事.我认为这些网站可能阻止了我的请求.有谁知道如何解决这个问题?
I'm writing some code using Selenium, and at one point I make 7 requests, all to different websites. For the first one, this works fine. However, for others, I get a session ID error. I think that my browser is configured correctly, as I do get results from the first website. I have tried to put a WebDriverWait in between the requests, but to no avail. I think the websites might be blocking my requests. Does anyone have any idea how to solve this problem?
对不起,如果这很愚蠢,或者我做错了什么,我很新^^
I'm sorry if this is something stupid or if I'm doing anything wrong, I'm quite new ^^
提前谢谢!
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)
服务器无法识别唯一的会话标识符时发生的WebDriver错误.如果会话已被删除或会话ID无效,则会发生这种情况.
invalid session id
The invalid session ID error is a WebDriver error that occurs when the server does not recognize the unique session identifier. This happens if the session has been deleted or if the session ID is invalid.
可以通过以下两种方式之一删除WebDriver会话:
A WebDriver session can be deleted through either of the following ways:
-
显式会话删除 :如下显式调用
quit()
方法时,将显式删除WebDriver会话:
Explicit session deletion: A WebDriver session is explicitly deleted when explicitly invoking the
quit()
method as follows:
-
代码块:
Code Block:
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)
控制台输出:
Console Output:
Current session is a9272550-c4e5-450f-883d-553d337eed48
No active session with ID a9272550-c4e5-450f-883d-553d337eed48
隐式会话删除 :当关闭最后一个调用close()
方法的窗口或选项卡时,将隐式删除WebDriver会话:
Implicit session deletion: A WebDriver session is implicitly deleted when you close the last window or tab invoking close()
method as follows:
-
代码块:
Code Block:
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)
控制台输出:
Console Output:
Current session is a9272550-c4e5-450f-883d-553d337eed48
No active session with ID a9272550-c4e5-450f-883d-553d337eed48
因为第一个请求可以正常工作,但是对于其他请求,您可能会收到会话ID 错误,很可能是检测到 WebDriver 控制的 Web浏览器因此阻止了下一个请求.
As the first one request works fine but for others you get a session ID error most possibly the WebDriver controled Web Browser is getting detected and hence blocking the next requests.
WebDriver 控制的 Web浏览器被检测并同时被阻止的原因多种多样.您可以在以下位置找到一些详细的讨论:
There are different reasons for the WebDriver controled Web Browser to get detected and simultaneously get blocked. You can find a couple of detailed discussion in:
- How does recaptcha 3 know I'm using selenium/chromedriver?
- Selenium and non-headless browser keeps asking for Captcha