2016-03-30 13 views
7

Ich benutze PhantomJS als meine webdriver. Manchmal dauert es zu lange, um eine Webseite zu laden, aber ich weiß nicht warum.selen webdriver dauert zu lange, um eine Seite zu laden

import time 
from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 

dcap = dict(DesiredCapabilities.PHANTOMJS) 
dcap["phantomjs.page.settings.userAgent"] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36' 
driver = webdriver.PhantomJS(service_args=['--load-images=no'], desired_capabilities=dcap) 
t=time.time() 
driver.get('http://www.tibetculture.net/2012zyzy/zx/201509/t20150915_3939844.html') 
print 'Time consuming:', time.time() - t 

Es dauerte etwa 86s, um die Seite zu laden. In einem Browser kann die Webseite in einigen Sekunden geladen werden und ich habe keine Ahnung, warum Webdriver PhantomJS so lange braucht. Was stimmt damit nicht?

Antwort

12

Es gibt ein Skript "ausstehend", das kontinuierlich ausgeführt wird. Was ich tun würde, ist die Seite zu laden Timeout zu setzen, übernehmen die TimeoutException durch Ausgabe window.stop():

from selenium.common.exceptions import TimeoutException 

t = time.time() 
driver.set_page_load_timeout(10) 

try: 
    driver.get('http://www.tibetculture.net/2012zyzy/zx/201509/t20150915_3939844.html') 
except TimeoutException: 
    driver.execute_script("window.stop();") 
print('Time consuming:', time.time() - t) 

print(driver.find_element_by_id("NewsTitle").text) 

Drucke die Nachrichten Titel (was beweist, dass man jetzt Elemente finden können und machen Aktionen auf der Seite):

Time consuming: 10.590633869171143 
让藏医药走出雪域高原 
+0

Es funktioniert wirklich und ich kann alle Elemente aus meinem Programm finden. Wurde die Zeit für das Herunterladen des "ausstehenden" Skripts verschwendet? Wenn es ein Zeitlimit gibt, dann höre mit dem Herunterladen und Rendern auf, gib einfach die Webseite zurück, die schon gerendert wurde, oder? Ich weiß nicht, ob ich den Punkt verstehe. Und danke, wirklich! – SimmerChan

+0

@SimmerChan Ja, das ist die Idee hinter dieser Lösung - verwenden Sie 'window.stop()', um ausstehende Anfragen zu stoppen. – alecxe

Verwandte Themen