2017-10-11 48 views
1
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列表並調用上面的方法。Python硒。如何正確使用driver.set_page_load_timeout()?

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實例?如何? (由於我在該函數之外初始化了驅動程序,因此我無法將其重新初始化爲除外)

+0

爲什麼你要在5秒內加載一個網頁....這將是困難的... – abccd

+1

雖然我不認爲它應該發生。一切似乎都是正確的,(除了事實上你還沒有導入'By'),這可能只是因爲你的互聯網速度慢或者網站的服務器速度很慢...... – abccd

+0

*「但是循環剛剛結束'打開'b.net',但等待'a.com'),並繼續拋出超時異常「*它不,它實際上是加載b.net,它只是不顯示在頂部。我想讓你知道,在硒中的鏈接需要一個前綴「https://」或「http://」才能工作。 – abccd

回答

1

在繼續之前,您只需清除瀏覽器的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 

附:如果沒有明確的異常類型,try...except...不是很明智,這是否可能會掩蓋不同的意外錯誤。

+0

拯救了我的生命......非常感謝:) – Sean

+0

有時它會在刪除Cookie時拋出另一個超時異常......任何想法? – Sean

+0

不抱歉,它從來沒有提出任何錯誤,所以我不知道爲什麼它發生在你的D: – abccd