我有下面的代码片段:
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 60)
for _ in range(10):
try:
driver.get(URL)
wait.until(EC.presence_of_element_located((By.XPATH, ".//*[@class='sr-match-default__status-pre']")))
driver.close()
# do something
except TimeoutException:
time.sleep(300)
continue
else:
driver.close()
这会产生一个selenium.common.exceptions.InvalidSessionIdException
,但我不知道为什么。
当我看到错误时,文档会这样说:
如果给定会话id不在活动会话列表中,则发生,这意味着会话要么不存在,要么不处于活动状态。
我的代码不是这样的。在前面的脚本/代码中,我在关闭driver
之前成功地定义和使用了它。此外,driver
能够在没有任何问题的情况下检索URL。请指点
完整的错误日志如下所示:
File "/scheduler.py", line 24, in get_new_matches
driver.get(URL)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 436, in get
self.execute(Command.GET, {'url': url})
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 424, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
Stacktrace:
0 chromedriver 0x0000000102fe7159 chromedriver + 5120345
1 chromedriver 0x0000000102f74b13 chromedriver + 4651795
2 chromedriver 0x0000000102b64d1f chromedriver + 392479
3 chromedriver 0x0000000102b8ce94 chromedriver + 556692
4 chromedriver 0x0000000102bb7abc chromedriver + 731836
5 chromedriver 0x0000000102bb5885 chromedriver + 723077
6 chromedriver 0x0000000102bb5127 chromedriver + 721191
7 chromedriver 0x0000000102b3d7da chromedriver + 231386
8 chromedriver 0x0000000102fa438d chromedriver + 4846477
9 chromedriver 0x0000000102fbe21c chromedriver + 4952604
10 chromedriver 0x0000000102fc3a12 chromedriver + 4975122
11 chromedriver 0x0000000102fbeb4a chromedriver + 4954954
12 chromedriver 0x0000000102f995b0 chromedriver + 4801968
13 chromedriver 0x0000000102b3c8ae chromedriver + 227502
14 libdyld.dylib 0x00007fff6757dcc9 start + 1
15 ??? 0x0000000000000002 0x0 + 2
发布于 2022-03-27 10:53:46
您在break
中丢失了一条for
语句,如果没有它,代码的行为就会因为循环不成功而运行,并执行第二次关闭driver
的else
块。有关更详细的解释,请参见为什么python在for和while循环之后使用“after”?。
在break
块的末尾添加try
语句可以解决这个问题。
https://stackoverflow.com/questions/71635014
复制相似问题