2014-06-06 14 views
5

Tôi đang sử dụng selenium-python với PhantomJS. Mã này khá giống như thế này:PhantomJS ngẫu nhiên không thoát (sử dụng Selenium với Python)

from selenium.webdriver import PhantomJS 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions 
driver = PhantomJS() 
wait = WebDriverWait(driver, 10) 
driver.get(url) 
while True: 
    // scrap the page 
    try: 
     driver.find_elements_by_css_selector('.next')[0].click() 
    except: break 
    wait.until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, '.loading'))) 
    wait.until(expected_conditions.invisibility_of_element_located((By.CSS_SELECTOR, '.loading'))) 
driver.quit() 

Tôi sử dụng tác vụ cần chạy mã này định kỳ. Vấn đề là theo thời gian có một số quá trình phantomjs cũ. Khi tôi nhìn vào nhật ký cần tây nhiệm vụ được hoàn thành thành công mà không có bất kỳ lỗi nào nhưng quá trình phantomjs vẫn đang chạy.

Một số thông tin thêm:

  • Tôi đang sử dụng Python 3.2
  • Tôi đang sử dụng cần tây 3.1 với nhịp
  • Tôi đang sử dụng Debian Wheezy
  • PhamtomJS tôi biên soạn từ nguồn và tạo ra một liên kết tượng trưng như sau: ln -s /opt/phantomjs/bin/phantomjs /usr/local/bin/

Ai đó có thể đề xuất cách gỡ lỗi và tìm ra lỗi của ai?

+0

Bạn có thể thay thế PhantomJS bằng Trình duyệt ưa thích của mình và đặt nó trên màn hình ảo unter Linux với xvfbwrapper. Nếu những quá trình đó tồn tại thì đó có thể là vấn đề của selen. – barrios

+0

Đó sẽ là giải pháp cuối cùng để chuyển sang trình duyệt khác (nói Firefox hoặc Chromium với XVFB). Có cách nào khác để gỡ lỗi và tìm ra lỗi của ai không? – Ali

+0

Vì bạn có thể đọc biên dịch ảo không được khuyến khích nếu các tệp nhị phân phù hợp với nhu cầu của bạn. Điều gì về việc cài đặt nó từ repos debian hoặc sử dụng các tập tin biên dịch sẵn? – barrios

Trả lời

2

Tôi chưa sử dụng cần tây trước đây, bạn có chắc chắn cần tây sẽ hiển thị tất cả thông báo lỗi cho bạn không? Đối với mã của bạn, tôi nghĩ rằng nếu một ngoại lệ xảy ra khi chạy wait.until(...), driver.quit() sẽ không được thực hiện.

+0

Cảm ơn :) Đó là một sai lầm ngu ngốc! Vấn đề là cần tây đã thử lại nhiệm vụ, do đó, nó tiếp tục tồi tệ hơn và tất cả những gì tôi thấy là một số thông điệp 'RetryException'. – Ali

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