2015-02-11 5 views
7

मेरे पास एक लंबा चलने वाला पायथन ऐप है जो समय-समय पर (प्रत्येक 30-60 सेकंड) सेलेनियम और क्रोम ड्राइवर के साथ एक वेबपृष्ठ खोलता है, कुछ जावास्क्रिप्ट चलाता है और एक स्क्रीनशॉट लेता है। यह एक्सवीएफबी में क्रोम के साथ एक ईसी 2 उबंटू इंस्टेंस पर चल रहा है और अधिकांश भाग के लिए सबकुछ काम कर रहा है, सिवाय इसके कि प्रोग्राम लटकाएगा। यह इन पंक्तियों में से एक पर हो रहा है:सेलेनियम Chromedriver लटका?

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); 

(मैं एक सटीक लाइन नहीं है, लेकिन मैं डिबग बयान मैं में डाल दिया है से पता है कि इसे यहाँ बीच में कहीं है)

दुर्भाग्य से, कार्यक्रम क्रैश नहीं होता है इसलिए इसमें कोई त्रुटि संदेश नहीं है, यह सिर्फ रात 7 बजे से अंतहीन रूप से प्रतीक्षा कर रहा है। strace -p 'python program pid' रिटर्न चल रहा है: wait4(-1, और strace -p 'chromedriver pid' रिटर्न recvfrom(20,

चल रहा ps axjf में देख सकते हैं कि प्रक्रिया अभी भी चल रहा है, इसकी सिर्फ कुछ नहीं कर रहा। मैं अब क्या करना है, किसी भी सुझाव के नुकसान की तरह हूँ?

chromedriver संस्करण: 2.10.267518

गूगल क्रोम 40.0.2214.111

सेलेनियम (पिप के साथ स्थापित): 2.42.1

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

---- संपादित ----

मैंने अभी ChromeDriver 2.14.313457 और Selenium 2.44.0 पर अपडेट किया है, उम्मीद है कि यह इस मुद्दे को ठीक करेगा। मैं इसे अभी खोलने जा रहा हूं। अभी तक सलाह के लिए धन्यवाद दोस्तों!

---- संपादित ----

तो सेवा अभी भी फांसी समाप्त हो गया। मुझे आश्चर्य है कि ऐसा इसलिए है क्योंकि प्रत्येक स्क्रीनशॉट के लिए मैं Google क्रोम बंद और पुनरारंभ करता हूं? क्या यह संभवतः किसी भी तरह मेमोरी रिसाव का कारण बन रहा है? मैं इसका निदान कैसे कर सकता हूं?

+1

यदि क्रोम विकल्प निर्दिष्ट नहीं हैं तो क्या यह लटका है? आप किस सेलेनियम और क्रोम संस्करण का उपयोग कर रहे हैं? – alecxe

+0

इसके अलावा, डीबग लॉग संदेशों को जोड़ने का प्रयास करें और देखें कि यह कौन सी रेखा लटक रही है। साथ ही, दिखाएं कि आप 'xvfb' कैसे शुरू करते हैं। धन्यवाद। – alecxe

+0

मेरे संपादन देखें। मैं कुछ बार इस पर डीबग संदेश जोड़ रहा हूं कि यह हुआ है, हालांकि मुझे लगता है कि मैं पर्याप्त नहीं था। – Trevor

उत्तर

1

मुझे इस समस्या का कारण बनने वाले कोड का विशिष्ट टुकड़ा कभी नहीं मिला, लेकिन प्रत्येक ड्राइवर लोड के साथ एक्सवीएफबी का एक नया उदाहरण बनाने से यह तय हो गया है। शायद सेलेनियम और एक्सवीएफबी के बीच बातचीत में स्मृति मेमोरी है? किसी भी तरह से, इसे बंद के रूप में चिह्नित करें।

6

मैं एक समान मुद्दे में भाग गया और उत्तर here पाया और इसके बारे में here ब्लॉग किया। पर्यावरण परिवर्तक को सेट करना DBUS_SESSION_BUS_ADDRESS =/dev/null ने हमेशा मेरे लिए Xvfb को पुनरारंभ किए बिना काम किया।

संबंधित मुद्दे