Selenium headless 在带有 Perl 的 CentOS 7 上不 运行,"no display specified"
Selenium headless does not run on CentOS 7 with Perl, "no display specified"
我尝试在 CentOS7 上 运行 headless Selenium:
# cat /etc/os-release
NAME="Red Hat Enterprise Linux Server"
VERSION="7.2 (Maipo)"
我安装了 Xvfb 并且运行它是
# /usr/bin/Xvfb :99
我安装了火狐:
# firefox -v
Mozilla Firefox 38.5.0
和 运行 检查它是否可以 运行:
# export DISPLAY=:99
# firefox
这是输出:
# firefox
Xlib: extension "RANDR" missing on display ":99".
console.error:
[CustomizableUI]
Custom widget with id loop-button does not return a valid node
console.error:
[CustomizableUI]
Custom widget with id loop-button does not return a valid node
GLib-GIO-Message: Using the 'memory' GSettings backend. Your settings will not be saved or shared with other applications.
Firefox 似乎 运行ning 在该命令之后:
# ps aux | grep firefox
root 29476 7.3 14.9 852356 152256 pts/3 Sl+ 10:30 0:03 /usr/lib64/firefox/firefox
编辑
是的,现在是 运行ning。
从 Xvfb 截图
DISPLAY=:99 import -window root -crop 1264x948+0+0 /tmp/screenshot.jpg
我能看到
现在是有问题的部分。
我为 perl 安装了 Selenium 远程驱动程序
# cpanm Selenium::Remote::Driver
然后我 运行 独立的 selenium 驱动程序:
# java -jar selenium-server-standalone-2.49.0.jar
现在我运行测试脚本:
#!/usr/bin/perl
use strict;
use warnings;
use Selenium::Remote::Driver;
my $driver = Selenium::Remote::Driver->new(browser_name=>'firefox');
$driver->get('http://www.google.com');
print $driver->get_title();
$driver->quit();
45 秒后,我收到驱动程序的错误消息:
Could not create new session: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
Error: no display specified
at (eval 89) line 510.
似乎驱动程序启动的firefox 没有看到DISPLAY 环境变量。我尝试从脚本中添加它:
#!/usr/bin/perl
use strict;
use warnings;
use Selenium::Remote::Driver;
$ENV{DISPLAY}=":99";
my $driver = Selenium::Remote::Driver->new(browser_name=>'firefox');
$driver->get('http://www.google.com');
print $driver->get_title();
$driver->quit();
没有用,之前的错误依旧。
我该怎么办?
EDIT2
我用 Python 尝试了当前设置。所有作品。
# pip install selenium
并使用了以下测试脚本:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.python.org")
f = open('ptn-sel.txt', 'w')
f.write(driver.title)
driver.close()
f.close()
我知道这是 Perl 驱动程序的问题....有什么建议吗?
python 是使用独立服务器还是 运行 firefox 本身?
如果 perl 正在使用服务器并且服务器正在生成 firefox,那么您需要 $DISPLAY
在服务器进程环境而不是脚本环境中设置。 (通过 运行 export DISPLAY=:99; java -jar selenium-server-standalone-2.49.0.jar
或类似的。)
如果您根本不想使用独立服务器,那么 Selenium::Firefox 看起来它可能很有趣。
我尝试在 CentOS7 上 运行 headless Selenium:
# cat /etc/os-release
NAME="Red Hat Enterprise Linux Server"
VERSION="7.2 (Maipo)"
我安装了 Xvfb 并且运行它是
# /usr/bin/Xvfb :99
我安装了火狐:
# firefox -v
Mozilla Firefox 38.5.0
和 运行 检查它是否可以 运行:
# export DISPLAY=:99
# firefox
这是输出:
# firefox
Xlib: extension "RANDR" missing on display ":99".
console.error:
[CustomizableUI]
Custom widget with id loop-button does not return a valid node
console.error:
[CustomizableUI]
Custom widget with id loop-button does not return a valid node
GLib-GIO-Message: Using the 'memory' GSettings backend. Your settings will not be saved or shared with other applications.
Firefox 似乎 运行ning 在该命令之后:
# ps aux | grep firefox
root 29476 7.3 14.9 852356 152256 pts/3 Sl+ 10:30 0:03 /usr/lib64/firefox/firefox
编辑 是的,现在是 运行ning。
从 Xvfb 截图DISPLAY=:99 import -window root -crop 1264x948+0+0 /tmp/screenshot.jpg
我能看到
现在是有问题的部分。
我为 perl 安装了 Selenium 远程驱动程序
# cpanm Selenium::Remote::Driver
然后我 运行 独立的 selenium 驱动程序:
# java -jar selenium-server-standalone-2.49.0.jar
现在我运行测试脚本:
#!/usr/bin/perl
use strict;
use warnings;
use Selenium::Remote::Driver;
my $driver = Selenium::Remote::Driver->new(browser_name=>'firefox');
$driver->get('http://www.google.com');
print $driver->get_title();
$driver->quit();
45 秒后,我收到驱动程序的错误消息:
Could not create new session: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
Error: no display specified
at (eval 89) line 510.
似乎驱动程序启动的firefox 没有看到DISPLAY 环境变量。我尝试从脚本中添加它:
#!/usr/bin/perl
use strict;
use warnings;
use Selenium::Remote::Driver;
$ENV{DISPLAY}=":99";
my $driver = Selenium::Remote::Driver->new(browser_name=>'firefox');
$driver->get('http://www.google.com');
print $driver->get_title();
$driver->quit();
没有用,之前的错误依旧。 我该怎么办?
EDIT2
我用 Python 尝试了当前设置。所有作品。
# pip install selenium
并使用了以下测试脚本:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.python.org")
f = open('ptn-sel.txt', 'w')
f.write(driver.title)
driver.close()
f.close()
我知道这是 Perl 驱动程序的问题....有什么建议吗?
python 是使用独立服务器还是 运行 firefox 本身?
如果 perl 正在使用服务器并且服务器正在生成 firefox,那么您需要 $DISPLAY
在服务器进程环境而不是脚本环境中设置。 (通过 运行 export DISPLAY=:99; java -jar selenium-server-standalone-2.49.0.jar
或类似的。)
如果您根本不想使用独立服务器,那么 Selenium::Firefox 看起来它可能很有趣。