【问题标题】:How to stop python selenium webdriver infinite page load [duplicate]如何停止python selenium webdriver无限页面加载[重复]
【发布时间】:2019-09-11 12:41:04
【问题描述】:

我正在尝试加载网址 https://www.eurexchange.com/exchange-en/products/idx/stx/blc/EURO-STOXX-50-Index-Options-46548

但是最近有些页面会无限加载,并且带有 selenium.webdriver.execute_script('window.stop()') 的 time.sleep() 函数不能解决问题。

试过了:

browser.execute_script('window.stip()')
and browser.find_element_by_tag_name("body").sendkeys(Keys.ESCAPE)

仍然看到页面加载。

website_url = 'https://www.eurexchange.com/exchange-en/products/idx/stx/blc/EURO-STOXX-50-Index-Options-46548'
browser = webdriver.Chrome(executable_path=chromedriver_path, options=chrome_options)
dropdown = Select(browser.find_element_by_xpath('//*[@id="maturityDate"]'))
dropdown_len = len(dropdown.options)

for i in range(1, dropdown_len):
    rows = []
    time.sleep(2)
    browser.execute_script('window.stop()')
    # browser.find_element_by_tag_name("body").sendkeys(Keys.ESCAPE)

【问题讨论】:

  • 我要做的是在 chrome 浏览器中手动按十字“x”以终止加载,然后代码移动到下一个下拉工作。
  • 只是为了确保您在脚本中输入了browser.execute_script('window.stip()') 而不是browser.execute_script('window.stop()')??
  • 是的,我的代码快照正是我放在那里的。

标签: python selenium webdriver python-3.6


【解决方案1】:

我相信您正在寻找WebDriverWait method,这允许您指定超时等待元素出现在页面中,如果它没有在分配的时间内出现,您可以终止脚本或无论你想采取什么行动。

例子来自Selenium's Python documentation

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

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

【讨论】:

    【解决方案2】:

    您可以使用超时来避免永远等待

    browser.implicitly_wait(60) # 60 seconds to wait && this is only used with chrome
    browser.set_page_load_timeout(60) # for other browsers
    

    这将引发异常,因此您需要执行 try except 语句,例如:

    browser.implicitly_wait(60)
    
    try:
        browser.get('http://www.example.com')
    except:
        print "loading exceeded the time limit" # not sure what python version you are using
    

    【讨论】:

    • 它适用于前几个下拉框选择,然后在 4 次下拉框刷新后仍然保持加载。我用 browser.implicitly_wait(3)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多