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

मैं EC2 उदाहरण पर हूँ तो कोई जीयूआई नहीं है

$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 

Solutions Collecting From Web of "मैं Xvfb में सेलेनियम कैसे चलाऊँ?"

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

इसके अलावा अपने / etc / environment फाइल में सुनिश्चित करें कि एक पंक्ति है

 export DISPLAY=:0.0 

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

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

हेडलेस वेबड्राइवर परीक्षणों को चलाने के लिए आप 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. 

सबसे आसान तरीका संभवत: xvfb-run का उपयोग करना है:

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

xvfb- रन आपके लिए पूरे एक्स अधिकार नृत्य करता है, इसे एक कोशिश दे दो!

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

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

  DISPLAY निर्यात करें: 99
 /etc/init.d/xvfb प्रारंभ करें

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

  /etc/init.d/xvfb स्टॉप 

मैं का उपयोग करता init.d फ़ाइल इस तरह दिखता है:

  #! / Bin / bash

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

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

CentOS 7 पर मेरे मामले में:

संकुल:

 PIP_PACKAGES="selenium pyvirtualdisplay" YUM_PACKAGES="python34-pip httpd firefox xorg-x11-server-Xvfb expect python34-paramiko" 

प्रदर्शन:

 su --command="Xvfb :22 -screen 0 1024x768x16 > /dev/null 2>&1 &" root export DISPLAY=:22 

सरल परीक्षण:

 #!/usr/bin/env python3 from selenium import webdriver from pyvirtualdisplay import Display browser = webdriver.Firefox() browser.get('https://google.com') if "Google" in browser.title: print(browser.title)