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...
不是很明智,因为这可能会掩盖不同的意外错误。