2016-03-30 14 views
7

Tôi sử dụng PhantomJS làm trình quản trị web của tôi. Đôi khi phải mất quá nhiều thời gian để tải trang web nhưng tôi không biết tại saoselenium webdriver mất quá nhiều thời gian để tải một trang

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 

Mất khoảng 86 giây để tải trang. Trong một trình duyệt, trang web có thể được tải trong vài giây và tôi không biết tại sao trình duyệt web PhantomJS mất một thời gian dài như vậy. Có gì sai với nó?

Trả lời

12

Có một tập lệnh "đang chờ xử lý" đang chạy liên tục. Những gì tôi sẽ làm là để thiết lập trang tải timeout, xử lý các TimeoutException bằng cách phát hành 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) 

In tiêu đề tin tức (chứng minh rằng bây giờ bạn có thể xác định vị trí các yếu tố và thực hiện hành động trên trang):

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

Nó thực sự hoạt động và tôi có thể xác định tất cả các yếu tố từ chương trình của mình. Vì vậy, đã lãng phí thời gian khi tải xuống tập lệnh 'đang chờ xử lý' chưa? nếu có thời gian chờ, sau đó ngừng tải xuống và hiển thị, chỉ cần trả lại trang web đã được hiển thị, phải không? Tôi không biết liệu tôi có nhận được điểm hay không. Và cảm ơn thực sự! – SimmerChan

+0

@SimmerChan yeah, đó là ý tưởng đằng sau giải pháp này - sử dụng 'window.stop()' để dừng các yêu cầu đang chờ xử lý. – alecxe

Các vấn đề liên quan