2016-03-30 2 views
7

Я использую PhantomJS как мой webdriver. Иногда это занимает слишком много времени, чтобы загрузить веб-страницу, но я не знаю, почемуselenium webdriver занимает слишком много времени, чтобы загрузить страницу

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 

потребовалось около 86s, чтобы загрузить страницу. В браузере веб-страница может быть загружена через несколько секунд, и я понятия не имею, почему Webdriver PhantomJS занимает такое долгое время. Что с этим не так?

ответ

12

Существует непрерывный сценарий, выполняющийся непрерывно. Что я хотел бы сделать, это установить тайм-аут загрузки страницы, обрабатывать TimeoutException путем выдачи 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) 

Печатает название новости (доказательство того, что теперь вы можете найти элементы и совершать действия на странице):

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

Это действительно работает, и я могу найти все элементы из своей программы. Итак, было ли время потрачено на загрузку «ожидающего» сценария? если есть тайм-аут, прекратите загрузку и рендеринг, просто вернув веб-страницу, которая уже была сделана, правильно? Я не знаю, понимаю ли я это. И спасибо! – SimmerChan

+0

@SimmerChan Да, это идея этого решения - используйте 'window.stop()' для остановки ожидающих запросов. – alecxe

Смежные вопросы