如何在 Xvfb 中运行 Selenium?
- 2024-09-30 14:02:00
- admin 原创
- 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
解决方案 1:
您可以使用PyVirtualDisplay(Xvfb 的 Python 包装器)来运行无头 WebDriver 测试。
#!/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:
最简单的方法可能是使用 xvfb-run:
DISPLAY=:1 xvfb-run java -jar selenium-server-standalone-2.0b3.jar
xvfb-run 为您完成整个 X 权限舞蹈,尝试一下!
解决方案 3:
打开终端并运行此命令 xhost +
。每次重启机器时都需要运行此命令。如果一切正常,您可以将其添加到启动命令中
还要确保 /etc/environment 文件中有一行
export DISPLAY=:0.0
然后,运行测试以查看问题是否已解决。
在使用之前请注意下面 sardathrion 的评论。
解决方案 4:
这是我使用的设置:
在运行测试之前,执行:
导出显示=:99
/etc/init.d/xvfb 启动
测试结束后:
/etc/init.d/xvfb 停止
我使用的文件init.d
如下所示:
/bin/bash #!/bin/bash
XVFB=/usr/bin/Xvfb
XVFBARGS="$DISPLAY -ac -screen 0 1024x768x16"
PIDFILE=${HOME}/xvfb_${DISPLAY:1}.pid
案例“$1”
开始)
echo -n“启动虚拟 X 帧缓冲区:Xvfb”
/sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
回显“。”
;;
停止)
echo -n“停止虚拟 X 帧缓冲区:Xvfb”
/sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE
回显“。”
;;
重新啟動
$0停止
0 美元起
;;
*)
echo "用法:/etc/init.d/xvfb {start|stop|restart}"
出口 1
埃萨克
出口 0
解决方案 5:
如果您使用 Maven,您可以使用xvfb-maven-plugin在测试前启动 xvfb,使用相关的DISPLAY
环境变量运行它们,最后停止 xvfb。
解决方案 6:
正确的做法是:
xvfb-run python ./selenium-script.py
无需添加:
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()
display.stop()
但是现在,有了 Selenium WebDriver,就不再需要运行了xvfb
(请参阅原因说明)。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD