मैं Xvfb में सेलेनियम कैसे चलाऊं?


91

मैं EC2 उदाहरण पर हूं। तो कोई GUI नहीं है।

$pip install selenium
$sudo apt-get install firefox xvfb

फिर मैं यह करता हूं:

$Xvfb :1 -screen 0 1024x768x24 2>&1 >/dev/null &

$DISPLAY=:1 java -jar selenium-server-standalone-2.0b3.jar
05:08:31.227 INFO - Java: Sun Microsystems Inc. 19.0-b09
05:08:31.229 INFO - OS: Linux 2.6.32-305-ec2 i386
05:08:31.233 INFO - v2.0 [b3], with Core v2.0 [b3]
05:08:32.121 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
05:08:32.122 INFO - Version Jetty/5.1.x
05:08:32.123 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
05:08:32.124 INFO - Started HttpContext[/selenium-server,/selenium-server]
05:08:32.124 INFO - Started HttpContext[/,/]
05:08:32.291 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@1186fab
05:08:32.292 INFO - Started HttpContext[/wd,/wd]
05:08:32.295 INFO - Started SocketListener on 0.0.0.0:4444
05:08:32.295 INFO - Started org.openqa.jetty.jetty.Server@1ffb8dc

महान, सब कुछ अब, सही काम करना चाहिए?

जब मैं अपना कोड चलाता हूं:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox() 
browser.get("http://www.yahoo.com") 

मैंने इसे प्राप्त किया:

Error: cannot open display: :0

2
यदि आप X चलाने के बिना किसी सिस्टम पर हैं, तो प्रदर्शन: 0 उपलब्ध होना चाहिए। Xvfb चलाने की कोशिश करें: 0 - यह भी देखें xvfb- रन @ एमा द्वारा उल्लिखित
fijiaaron

: भविष्य अनुयायियों के लिए, मैं Ubuntu सर्वर के लिए मेरे समाधान वर्णित namekdev.net/2016/08/...
Namek

जवाबों:


35

एक टर्मिनल खोलें और इस कमांड को चलाएं xhost +। जब भी आप अपनी मशीन को पुनः आरंभ करते हैं, तो इस कमांड को चलाने की आवश्यकता होती है। यदि सब कुछ ठीक रहता है तो आप इसे स्टार्टअप कमांड में जोड़ सकते हैं

यह भी सुनिश्चित करें कि आपके / etc / पर्यावरण फ़ाइल में कोई रेखा है

export DISPLAY=:0.0 

और फिर, अपने परीक्षण को यह देखने के लिए चलाएं कि क्या आपका मुद्दा हल हो गया है।

सभी कृपया इसे उपयोग करने से पहले नीचे sardathrion की टिप्पणी पर ध्यान दें।


आपको बस कमांड लाइन से java-sj सेलेनियम-सर्वर-स्टैंडअलोन 2.0b3.jar को निष्पादित करने की आवश्यकता है और फिर अपने परीक्षण चलाएं
AJ

मैं EC2 उदाहरण पर हूं, इसलिए कोई GUI नहीं है। xhost: डिस्प्ले खोलने में असमर्थ ": 0.0"
TIMEX

@ आपको क्लाइंट वातावरण में DISPLAY पर्यावरण चर की भी आवश्यकता है।
कीथ

10
xhost +असुरक्षित है। कृपया इसका उपयोग न करें। यदि आपको xhost का उपयोग करना है, तो वह विशिष्ट मशीन जोड़ें जिसे आप चाहते हैं और न + (उर्फ सब कुछ)।
सारथ्रियन - एसई दुरुपयोग के खिलाफ

170

आप बिना सिर के वेबड्राइवर परीक्षण चलाने के लिए PyVirtualDisplay ( Xvfb के लिए पायथन आवरण) का उपयोग कर सकते हैं ।

#!/usr/bin/env python

from pyvirtualdisplay import Display
from selenium import webdriver

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

# now Firefox will run in a virtual display. 
# you will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print browser.title
browser.quit()

display.stop()

और जानकारी


आप xvfbwrapper का भी उपयोग कर सकते हैं , जो एक समान मॉड्यूल है (लेकिन कोई बाहरी निर्भरता नहीं है):

from xvfbwrapper import Xvfb

vdisplay = Xvfb()
vdisplay.start()

# launch stuff inside virtual display here

vdisplay.stop()

या बेहतर अभी तक, इसे एक संदर्भ प्रबंधक के रूप में उपयोग करें:

from xvfbwrapper import Xvfb

with Xvfb() as xvfb:
    # launch stuff inside virtual display here.
    # It starts/stops in this code block.

2
@Andrei OSX डिफ़ॉल्ट रूप से X11 का उपयोग नहीं करता है
boosalis

इस जवाब का इस्तेमाल यह करने के लिए किया गया कि यह योनि + पाइकर्म + Django के साथ OS X पर काम करेगा: stackoverflow.com/q/29343109
chachan

जब मैं ऊपर pyvirtualdisplay कोड लागू करता हूं तो मुझे "ब्राउज़र बाहर निकलता है" मिलता है
gtownrower

45

सबसे आसान तरीका शायद xvfb- रन का उपयोग करना है:

DISPLAY=:1 xvfb-run java -jar selenium-server-standalone-2.0b3.jar

xvfb- रन आपके लिए पूरे एक्स अथॉरिटी डांस करता है, इसे आज़माएं!


यह ठीक वही है जिसकी तलाश मुझे थी। Xvfb को अपने आप शुरू करना मेरे लिए काम नहीं कर रहा था, लेकिन xvfb- रन का उपयोग करके चाल चली। धन्यवाद।
रीना अबोलोफिया

9
DISPLAY=:1अनावश्यक है; :99निर्दिष्ट कमांड (आपके मामले में java -jar selenium-server...) शुरू करने से पहले xvfb- रन डिसप्ले पर्यावरण चर को कुछ और (आम तौर पर ) सेट करता है
एलेक्स डुप्यू

20

यह वह सेटअप है जिसका मैं उपयोग करता हूं:

परीक्षण चलाने से पहले, निष्पादित करें:

निर्यात प्रदर्शन =: 99
/etc/init.d/xvfb प्रारंभ

और परीक्षणों के बाद:

/etc/init.d/xvfb रोकें

init.dमैं जिस फ़ाइल का उपयोग करता हूं वह इस प्रकार है:

#! / Bin / bash

XVFB = / usr / bin / Xvfb
XVFBARGS = "$ DISPLAY -ac-screen 0 1024x768x16"
PIDFILE = $ {गृह} / xvfb _ $ {प्रदर्शन: 1} .pid
मामला "$ 1" में
  शुरू)
    इको-एन "वर्चुअल एक्स फ्रेम बफर शुरू करना: एक्सवीएफबी"
    / sbin / start-stop-daemon --start --quiet --pidfile $ PIDFILE --make-pidfile --background --exec $ XVFB - $ XVFBARGS
    गूंज "।"
    ;;
  रुकें)
    इको-एन "स्टॉपिंग वर्चुअल एक्स फ्रेम बफर: एक्सवीएफबी"
    / sbin / start-stop-daemon --stop --quiet --pidfile $ PIDFILE
    गूंज "।"
    ;;
  पुनः आरंभ करें)
    $ 0 बंद करो
    $ 0 शुरू
    ;;
  *)
  प्रतिध्वनि "उपयोग: /etc/init.d/xvfb {प्रारंभ | बंद करो | पुनरारंभ} |"
  बाहर निकलें 1
esac
बाहर निकलें 0

मैंने ठीक यही किया और फिर अपनी स्क्रिप्ट चलाई। हालाँकि, मुझे अभी भी यह मिलता है: त्रुटि: प्रदर्शन नहीं खोल सकती:: 0। इसके अलावा, क्या मुझे सेलेनियम जावा सर्वर चलाने की आवश्यकता है? ऐसा लगता है जैसे यह बात नहीं है कि मैं इसे चलाता हूं या नहीं ...
TIMEX

2
उल्लू, यदि आप वेबड्राइवर का उपयोग करते हैं, तो आपको सेलेनियम जावा सर्वर की आवश्यकता नहीं है।
कोरी गोल्डबर्ग

3

यदि आप मावेन का उपयोग करते हैं, तो आप xvfb-maven-plugin का उपयोग परीक्षणों से पहले xvfb शुरू करने के लिए कर सकते हैं , संबंधित DISPLAYपर्यावरण चर का उपयोग करके उन्हें चला सकते हैं , और सभी के बाद xvfb को रोक सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.