【问题标题】:Setting page load timeout in Selenium Python binding在 Selenium Python 绑定中设置页面加载超时
【发布时间】:2015-11-23 10:42:23
【问题描述】:

我正在使用带有 Selenium 模块的 Python 编写一个机器人。当我用我的机器人打开一个网页时,由于该网页包含的外部源比 dom 太多,因此加载所有页面需要很多时间。我使用显式和隐式等待来消除此问题,因为我只想加载特定元素而不是所有网页,它不起作用。问题是如果我运行以下语句:

driver = webdriver.Firefox()
driver.get('somewebpage')
elm = WebDriverWait(driver, 5).until(ExpectedConditions.presence_of_element_located((By.ID, 'someelementID'))


elm.click()

它不起作用,因为 Selenium 等待 driver.get() 完全检索网页,然后继续进行。现在我想写一个为driver.get()设置超时的代码,比如:

driver.get('somewebpage').timeout(5)

driver.get() 在 5 秒后停止加载页面并继续程序流程,无论 driver.get() 是否完全加载网页。

顺便说一下,我已经搜索了我上面说的功能,并且在那里遇到了:

Selenium WebDriver go to page without waiting for page load

但问题是,上面链接中的答案并没有说明 Python 等效代码。

我如何实现我正在寻找的未来?

【问题讨论】:

    标签: python selenium dom webpage bots


    【解决方案1】:

    python当前问题中提到的问题的等效代码(Selenium WebDriver go to page without waiting for page load):

    from selenium import webdriver
    
    profile = webdriver.FirefoxProfile()
    profile.set_preference('webdriver.load.strategy', 'unstable')
    driver = webdriver.Firefox(profile)
    

    和:

    driver.set_page_load_timeout(5)
    

    【讨论】:

      【解决方案2】:

      对此有很多问题,here is an example。这是一个等待所有 jquery ajax 调用完成或 5 秒超时的示例。

      from selenium.webdriver.support.ui import WebDriverWait
      
      WebDriverWait(driver, 5).until(lambda s: s.execute_script("return jQuery.active == 0"))
      

      【讨论】:

        【解决方案3】:

        这是一个非常繁琐的问题要解决。我只是做了以下事情,问题就解决了:

        driver= webdriver.Firefox()
        driver.set_page_load_timeout(5)
        driver.get('somewebpage')
        

        使用 Firefox 驱动程序(以及 Chrome 驱动程序)对我有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-11
          • 2012-05-23
          • 2019-05-15
          • 2023-01-08
          • 2020-05-24
          • 1970-01-01
          相关资源
          最近更新 更多