繁体   English   中英

TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: 消息:

[英]TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:

我使用此行代码等待 product_id 出现,我的代码运行良好约 30 分钟

    element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, product_id)))

然后,我收到一个错误

TimeoutException(message, screen, stacktrace)selenium.common.exceptions.TimeoutException: Message: 

我尝试将 WebDriverWait 更改为 100,但我仍然无法解决它们。 我想了解为什么会出现此错误以及针对这种情况的任何解决方案。 非常感谢 !!!

这是我的解决方案,但我想知道此错误的原因并寻找更好的解决方案

  while True:
    driver.get(URL)
    try:
        element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, product_id)))
        break
    except TimeoutException:
        driver.quit()

你能提供HTML示例吗? 没有 HTML 示例,几乎不可能为您调试。 代码和 HTML 示例会有所帮助。

我的猜测是您的网站使用动态 id 定位器,或使用 iframe,或者在您的脚本中,硒在其他选项卡/窗口/iframe/内容上处于活动状态。 这是假设您的product_id是正确的。


更新示例:

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

PRODUCT_ID = 'productTitle'

driver = webdriver.Chrome()
driver.get("https://www.amazon.com/dp/B08BB9RWXD")
try:
    element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, PRODUCT_ID)))
    print(element.text)
except TimeoutException:
    print("Cannot find product title.")

driver.quit()

使用上面的代码我没有任何问题。 你可以自己扩展它:)。

您需要注意的一件事是不要使用while & break WebDriverWait(driver, 10)已经循环查找元素 10 秒。 在这 10 秒内,如果它找到您的元素,它将停止查找( break )。 您不需要自己执行while循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM