Python Selenium。如何正确使用driver.set_page_load_timeout()?

时间:2017-10-11 05:13:39

标签: python selenium

from selenium import webdriver

driver = webdriver.Chrome()
driver.set_page_load_timeout(7)

def urlOpen(url):
    try:
        driver.get(url)
        print driver.current_url
    except:
        return

然后我有URL列表并调用上面的方法。

if __name__ == "__main__":
    urls = ['http://motahari.ir/', 'http://facebook.com', 'http://google.com']
    # It doesn't print anything

    # urls = ['http://facebook.com', 'http://google.com', 'http://motahari.ir/'] 
    # This prints https://www.facebook.com/ https://www.google.co.kr/?gfe_rd=cr&dcr=0&ei=3bfdWdzWAYvR8geelrqQAw&gws_rd=ssl

    for url in urls:
        urlOpen(url)

问题出在网站' http://motahari.ir/'抛出超时例外,网站' http://facebook.com'和' http://google.com'总是抛出超时异常。

浏览器一直在等待' motahari.ir /'载入。但循环只是继续(它没有打开' facebook.com'但等待' motahari.ir /')并继续抛出超时异常

初始化一个webdriver实例需要很长时间,所以我把它从方法中拉出来,我认为这导致了问题。那么,每当出现超时异常时,我是否应该始终重新初始化webdriver实例?如何? (由于我在函数之外初始化了驱动程序,我无法重新初始化它除外)

1 个答案:

答案 0 :(得分:2)

在继续操作之前,您只需清除浏览器的Cookie即可。 (对不起,我在前面的代码中错过了这个)

from selenium import webdriver

driver = webdriver.Chrome()
driver.set_page_load_timeout(7)

def urlOpen(url):
    try:
        driver.get(url)
        print(driver.current_url)
    except:
        driver.delete_all_cookies()
        print("Failed")
        return

urls = ['http://motahari.ir/', 'https://facebook.com', 'https://google.com']

for url in urls:
    urlOpen(url)

输出:

Failed
https://www.facebook.com/
https://www.google.com/?gfe_rd=cr&dcr=0&ei=o73dWfnsO-vs8wfc5pZI

P.S。如果没有明确的异常类型try...except...,这可能会掩盖不同的意外错误。