क्या GUI के बिना सेलेनियम (फ़ायरफ़ॉक्स) वेब ड्राइवर चलाना संभव है?


113

हम अपने प्रोडक्शन सर्वर को Ubuntu- डेस्कटॉप 10.04 से Ubuntu- सर्वर 12.04 पर अपग्रेड करने पर विचार कर रहे हैं ।

हमारे पास अपने वर्तमान डेस्कटॉप ओएस जैसे सेलेनियम वेब ड्राइवर पर चलने वाली विभिन्न सेवाएं हैं। मेरा सवाल यह है कि क्या सेलेनियम वेब ड्राइवर एक क्लि-आधारित प्रणाली से चलाया जा सकता है?

मेरा तात्कालिक विचार यह है कि यह नहीं हो सकता, क्योंकि यह फ़ायरफ़ॉक्स पर निर्भर करता है, लेकिन मैं किसी को गलत साबित करने के लिए चाहूँगा!


जवाबों:


102

आप जो देख रहे हैं वह ए है

हां, फ़ायरफ़ॉक्स पर सेलेनियम को बिना सिर के चलाना संभव है। यहाँ एक पोस्ट है जिसका आप अनुसरण कर सकते हैं।

यहाँ Xvfb को सेट करने के लिए सारांश चरण दिए गए हैं

#install Xvfb
sudo apt-get install xvfb

#set display number to :99
Xvfb :99 -ac &
export DISPLAY=:99    

#you are now having an X display by Xvfb

5
यह स्क्रीनशॉट का काम करता है और समर्थन करता है। मैं इसका उपयोग करता हूं। यह google chrome के साथ भी काम करता है।
इसहाक

मुझे नहीं लगता कि यह अब काम करता है (कम से कम आसानी से नहीं, क्योंकि इसके लिए क्रोम की तरह एक नए जियोकोड्राइवर की आवश्यकता होती है)
आर्किमिडीज

1
@ArchimedesTrajano यह अभी भी काम करता है। Xvfbसेलेनियम (जो geckodriverपथ पर होने की आवश्यकता है) को स्थापित करने और कॉन्फ़िगर करने के लिए नहीं, वर्चुअल डिस्प्ले का उपयोग करने के लिए निर्देश हैं ।
2

2
मुझे पायथन के भीतर से ऐसा करना पसंद है, जिसे आप subprocess.Popen('Xvfb...')या तो कर सकते हैं os.system('Xvfb...'), लेकिन वेबड्राइवर आयात करने से पहले इसे करना सुनिश्चित करें।
शब्दफोर्ट वाइज

4
वह लिंक अब टूट गया है
Oldboy

22

Chrome में अब एक हेडलेस मोड है:

op = webdriver.ChromeOptions()
op.add_argument('headless')
driver = webdriver.Chrome(options=op)

4
PhantomJS वर्तमान में सक्रिय विकास में नहीं है। गिट रिपॉजिटरी को संग्रहीत किया जाता है।
वोज्शिएक जकुबास

1
सेलेनियम ने भी निम्नलिखित संदेश के साथ फैंटमज का समर्थन बंद कर दिया "यूजरवर्निंग: फैंटमजस के लिए सेलेनियम समर्थन को हतोत्साहित किया गया है, कृपया इसके बजाय क्रोम या फ़ायरफ़ॉक्स के हेडलेस संस्करणों का उपयोग करें"
जोर्ज

11

हाँ। आप HTMLUnitDriverइसके बजाय FirefoxDriverवेबड्राइवर शुरू करने के लिए उपयोग कर सकते हैं । यह हेडलेस ब्राउजर सेटअप है। विवरण यहाँ पाया जा सकता है


1
क्या यह सपोर्ट फ़ंक्शंस जैसे save_screenshot () होगा? coreygoldberg.blogspot.co.uk/2011/06/…
nonshatter

कोशिश नहीं की गई है, लेकिन यह संभव हो सकता है क्योंकि आप अभी भी प्रभावी रूप से एक यूआई बना रहे हैं, लेकिन इसे 'वर्चुअल' विंडो पर दिखा रहे हैं।
ग्रहामिन 15

2
HTMLUnitDriver कैप्चर स्क्रीनशॉट को सपोर्ट नहीं करेगा क्योंकि कंटेंट को प्रस्तुत नहीं किया गया है (अंक 1361)। एक विकल्प जिसके बारे में मैं सोच सकता हूं वह है स्क्रीनशॉट के बजाय getHTMLSource का उपयोग करना और HTML पृष्ठ दिखाना।
एजे

10

अगर आप हेडलेस ब्राउजर सपोर्ट चाहते हैं तो एक और तरीका है जिसे आप अपना सकते हैं।

https://github.com/detro/ghostdriver

इसकी घोषणा सेलेनियम सम्मेलन के दौरान की गई थी और यह अभी भी विकास में है। यह PhantomJS ब्राउज़र के रूप में उपयोग करता है और HTMLUnitDriver की तुलना में बहुत बेहतर है, अभी तक कोई स्क्रीनशॉट नहीं है, लेकिन जैसा कि यह अभी भी सक्रिय विकास में है।


4

एक वैकल्पिक pyvirtualdisplayइस तरह का उपयोग करने के लिए है:

from pyvirtualdisplay import Display

display = Display(visible=0, size=[800, 600])
display.start()

#do selenium job here

display.close()

एक छोटा संस्करण है:

with Display() as display:
    # selenium job here

यह आम तौर पर एक अजगर है xvfb, और किसी भी तरह अधिक आश्वस्त होता है।

वैसे, हालांकि PhantomJSएक बिना सिर वाला ब्राउज़र है और यदि आप इसका उपयोग करते हैं तो कोई भी खिड़की खुली नहीं होगी, ऐसा लगता है कि PhantomJSअभी भी काम करने के लिए एक गुई वातावरण की आवश्यकता है।

जब मैं हेडलेस मोड (पोटीन-कनेक्टेड कंसोल) के PhantomJS()बजाय उपयोग करता हूं तो मुझे त्रुटि कोड -6 मिला Firefox()। हालाँकि डेस्कटॉप वातावरण में सब कुछ ठीक है।


3

अद्यतन करें: अब आपको हेडलेस फ़ायरफ़ॉक्स चलाने के लिए XVFB की आवश्यकता नहीं है। फ़ायरफ़ॉक्स v55 + लिनक्स पर और फ़ायरफ़ॉक्स v56 + विंडोज / मैक पर अब हेडलेस निष्पादन का समर्थन करता है।

मैंने कुछ प्रलेखन यहाँ कैसे उपयोग के लिए जोड़ा:

https://developer.mozilla.org/en-US/Firefox/Headless_mode#Selenium_in_Java


1
टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
भार्गव राव

यह मेरे लिए काम नहीं किया। मुझे यकीन नहीं है, लेकिन मुझे लगता है कि XVFB अभी भी आवश्यक है।
मैक्स मलिश

मैं कई वर्षों से फ़ायरफ़ॉक्स और क्रोम पर हेडलेस ब्राउज़र का उपयोग कर रहा हूँ। सेलेनियम के लिए WebDriver इंटरफ़ेस अब एक सेटहेड पैरामीटर का भी समर्थन करता है।
निकोलस डिपियाज़ा


1

ज्ञात हो कि HtmlUnitDriver webclient सिंगल-थ्रेडेड है और Ghostdriver केवल WebDriver होने के लिए 40% कार्यात्मकताओं पर है।

बहरहाल, घोस्टड्राइवर परीक्षणों के लिए ठीक से चलता है और मुझे इसे वेबड्राइवर हब से जोड़ने के लिए समस्या है।


क्या यह कोई नई जानकारी प्रदान करता है जो अन्य उत्तर नहीं देते हैं?
ऑस्टिन हेनले

0

हां, आप एक ब्राउज़र के बिना परीक्षण स्क्रिप्ट चला सकते हैं, लेकिन आपको उन्हें बिना सिर के मोड में चलाना चाहिए।


0

शायद आपको अपना विंडो-आकार आयाम सेट करने की आवश्यकता हो। बिलकुल इसके जैसा:

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1920x1080');

browser = webdriver.Chrome(options=options,executable_path = './chromedriver')

यदि काम नहीं भी कर रहा है, तो खिड़की के आकार के आयाम को बढ़ाने का प्रयास करें।


0

स्थापित और कंटेनरीकृत फ़ायरफ़ॉक्स चलाएं:

docker pull selenium/standalone-firefox
docker run --rm -d -p 4444:4444 --shm-size=2g selenium/standalone-firefox

का उपयोग कर कनेक्ट करें webdriver.Remote:

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.