Selenium headless不能在CentOS 7上使用Perl运行;“未指定显示”;

Selenium headless不能在CentOS 7上使用Perl运行;“未指定显示”;,perl,selenium,centos,headless,Perl,Selenium,Centos,Headless,我尝试在CentOS7上运行headless Selenium: # cat /etc/os-release NAME="Red Hat Enterprise Linux Server" VERSION="7.2 (Maipo)" 我安装了Xvfb并以 # /usr/bin/Xvfb :99 我安装了firefox: # firefox -v Mozilla Firefox 38.5.0 并运行它以检查它是否可以运行: # export DISPLAY=:99 # firefox 这是

我尝试在CentOS7上运行headless Selenium:

# cat /etc/os-release 
NAME="Red Hat Enterprise Linux Server"
VERSION="7.2 (Maipo)"
我安装了Xvfb并以

# /usr/bin/Xvfb :99
我安装了firefox:

# 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似乎在该命令之后运行:

# ps aux | grep firefox
root     29476  7.3 14.9 852356 152256 pts/3   Sl+  10:30   0:03 /usr/lib64/firefox/firefox
编辑 是的,它在跑。通过

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();
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()
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没有看到显示环境变量。我尝试从脚本中添加它:

#!/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
并使用以下测试脚本:

#!/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();
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。但是如何在服务器中设置显示?在运行独立服务器之前,在shell中导出显示,以便独立服务器在其环境中设置显示。解决了该问题。导出显示=:99&&java-jar selenium-server-standalone-2.49.0.jar