2015-02-11 18 views
7

Tôi có một ứng dụng python chạy dài sẽ định kỳ (mỗi 30-60 giây) mở một trang web với trình điều khiển selen và chrome, chạy một số javascript và chụp ảnh màn hình. Nó chạy trên một phiên bản EC2 ubuntu với chrome trong Xvfb và cho hầu hết mọi thứ mọi thứ đang hoạt động, ngoại trừ liên tục chương trình sẽ treo. Nó đang xảy ra trên một trong những dòng này:Selenium Chromedriver Hangs?

options = Options() 
    options.add_argument("--disable-web-security") 
    options.add_argument("--webdriver-logfile=webdrive.log") 
    dc = DesiredCapabilities.CHROME 
    dc['loggingPrefs'] = {'browser': 'ALL'} 
    driver = webdriver.Chrome(chrome_options=options, desired_capabilities=dc) 
    driver.get(url); 

(Tôi không có một dòng chính xác nhưng tôi biết từ báo cáo debug Tôi đã đặt ở chỗ nó là nơi nào đó ở giữa đây)

Thật không may, chương trình không sụp đổ nên nó không có bất kỳ thông báo lỗi nào, nó chỉ chờ đợi không ngừng kể từ 7 giờ tối tối qua. Chạy strace -p 'python program pid' lợi nhuận: wait4(-1, và chạy strace -p 'chromedriver pid' lợi nhuận recvfrom(20,

tôi có thể nhìn thấy trong ps axjf rằng quá trình này vẫn chạy, nó chỉ là không làm gì cả. Tôi sắp bị mất việc phải làm bây giờ, có đề nghị gì không?

chromedriver phiên bản: 2.10.267518

Google Chrome 40.0.2214.111

Selenium (cài đặt với pip): 2.42.1

#https://github.com/cgoldberg/xvfbwrapper 
xvfb = Xvfb(width=1920, height=1920) 
xvfb.start() 

---- EDIT ----

Tôi vừa cập nhật thành ChromeDriver 2.14.313457Selenium 2.44.0, hy vọng điều này sẽ khắc phục được sự cố. Tôi sẽ để cái này mở ngay bây giờ. Cảm ơn lời khuyên cho đến nay guys!

---- CHỈNH SỬA ----

Vì vậy, dịch vụ vẫn kết thúc treo. Tôi tự hỏi nếu điều này là bởi vì cho mỗi ảnh chụp màn hình tôi đóng và khởi động lại google-chrome? Điều này có thể gây ra rò rỉ bộ nhớ bằng cách nào đó không? Làm thế nào tôi có thể chẩn đoán điều này?

+1

Ứng dụng có treo nếu tùy chọn chrome không được chỉ định không? Bạn đang sử dụng phiên bản selen và chrome nào? – alecxe

+0

Ngoài ra, hãy thử thêm thông báo nhật ký gỡ lỗi và xem dòng nào đang treo. Ngoài ra, hãy chỉ cho bạn cách bắt đầu 'xvfb'. Cảm ơn. – alecxe

+0

xem các chỉnh sửa của tôi. Tôi đã thêm thông báo gỡ lỗi trong vài lần điều này đã xảy ra, mặc dù tôi đoán tôi chưa đủ kỹ lưỡng. – Trevor

Trả lời

1

Tôi chưa bao giờ tìm ra đoạn mã cụ thể gây ra sự cố này, nhưng việc tạo một phiên bản Xvfb mới với mỗi lần tải trình điều khiển dường như đã sửa nó. Có lẽ có một rò rỉ bộ nhớ ở đâu đó trong sự tương tác giữa selen và Xvfb? Dù bằng cách nào, đánh dấu này là đóng cửa.

6

Tôi đã gặp sự cố tương tự và tìm thấy câu trả lời here và viết blog về nó here. Đặt biến môi trường DBUS_SESSION_BUS_ADDRESS =/dev/null làm việc cho tôi mà không phải khởi động lại Xvfb mọi lúc.

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