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实例吗?怎么做(由于我在函数外部初始化了驱动程序,因此无法在中重新初始化它,除非)

最佳答案

继续之前,您只需清除浏览器的cookies。(抱歉,我错过了在您以前的代码中看到这个)

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

注意,如果没有明确的异常类型,那么做try...except...不是很明智,因为这可能会掩盖不同的意外错误。

08-26 20:22
查看更多