selenium在linux上无界面运行,其实是非常简单的。具体的方法有使用HtmlUnitDriver或者PhantomJSDriver,有时间我会写写关于这两个东东的文章,其实基本和ChromeDriver 和FirefoxDriver是一样的。但是有些人或者会比较排斥他们说HtmlUnitDriver对JS支持不好,PhantomJSDriver估计也很少有人用,其实他是对Phantomjs的封装,对这些不做多过评论,我用下来感觉还好。

还有另一种方法,就是使用XVFB, 有人说XVFB是什么,没听说过,没听说过就自己Google吧。

这里就主要是讲一下XVFB的安装使用。以chrome + ubuntu 和 firefox + centOS 为例子(chrome linux版好像是到6的时候就不支持centOS了, 都自带firefox )

一、 XVFB在Ubuntu上的安装(chrome)

1. 安装ubuntu(百度google安装步骤)

2. putty.exe 连接ubuntu

安装openssh-server:sudo apt-get install openssh-server
    启动openssh-server:   sudo /etc/init.d/ssh start
    确认openssh-server是否启动:ps -e | grep ssh
    telnet ip 端口号

3. 安装oracle JDK6:(可跳过:自带penjdk-6-jre)
    $ remove openjdk:  sudo apt-get autoremove openjdk-6-jre
    $ sudo add-apt-repository ppa:webupd8team/java
    $ sudo apt-get update
    $ sudo apt-get install oracle-java6-installer
    $ sudo update-java-alternatives -s java-6-oracle

4. 装chrome:(自带firefox)
    http://www.ubuntuupdates.org/ppa/google_chrome
    wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - 
    sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
    sudo apt-get update 
    sudo apt-get install google-chrome-stable

5. 装xvfb 及各种:
       sudo apt-get update && sudo apt-get install -y xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic xvfb x11-apps  imagemagick firefox google-chrome-stable

OK, 到这一步都装好了。

二、测试安装

putty连接Ubuntu运行下面命令:

1. 启动Xvfb服务

Xvfb -ac :7 -screen 0 1280x1024x8  (注意这个是x, 不是* 哦)

2.  启动firefox or chrome

export  DISPLAY=:7

/usr/bin/google-chrome-stable http://www.investopedia.com         //chrome 浏览www.investopedia.com

或者

export DISPLAY=:7

firefox http://www.investopedia.com                                              //firefox 浏览www.investopedia.com

如果运行完后,出现:

Xlib: extension "RANDR"  missing on display ":7"

我想说,you made it. 这是个无关紧要的信息,之前我试图解决掉它,没有成功。最后我在运行selenium脚本后,完全没有出现这个信息,脚本执行很正常,所以现在我把它当做是安装成功的信息。

当然运行selenium 脚本前总不能老是敲一遍这些命令,太麻烦了。

弄成一个服务,先 touch /etc/init.d/xvfb

脚本如下:

  1. #! /bin/bash
  2. if [ -z "$1" ]; then
  3. echo "`basename $0` {start|stop}"
  4. exit
  5. fi
  6. case "$1" in
  7. start)
  8. /usr/bin/Xvfb :7 -ac -screen 0 1024x768x8 &
  9. ;;
  10. stop)
  11. killall Xvfb
  12. ;;
  13. esac

修改脚本权限,启动服务:

chmod +x /etc/init.d/xvfb
chkconfig xvfb on
service xvfb start

停止服务的话就是: service xvfb stop

完毕了。

三、Xvfb在CentsOS安装

  1. Install Xvfb with library:
  2. yum install Xvfb
  3. yum -y install libXfont
  4. yum install xorg-x11-fonts*
  5. touch /etc/init.d/xvfb with content:
  6. #!/bin/bash
  7. #
  8. # /etc/rc.d/init.d/xvfbd
  9. #
  10. # chkconfig: 345 95 28
  11. # description: Starts/Stops X Virtual Framebuffer server
  12. # processname: Xvfb
  13. #
  14. . /etc/init.d/functions
  15. [ "${NETWORKING}" = "no" ] && exit 0
  16. PROG="Xvfb"
  17. PROG_OPTIONS=":7 -ac -screen 0 1024x768x24"
  18. PROG_OUTPUT="/tmp/Xvfb.out"
  19. case "$1" in
  20. start)
  21. echo -n "Starting : X Virtual Frame Buffer "
  22. $PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 &
  23. disown -ar
  24. /bin/usleep 500000
  25. status Xvfb & >/dev/null && echo_success || echo_failure
  26. RETVAL=$?
  27. if [ $RETVAL -eq 0 ]; then
  28. /bin/touch /var/lock/subsys/Xvfb
  29. /sbin/pidof -o  %PPID -x Xvfb > /var/run/Xvfb.pid
  30. fi
  31. echo
  32. ;;
  33. stop)
  34. echo -n "Shutting down : X Virtual Frame Buffer"
  35. killproc $PROG
  36. RETVAL=$?
  37. [ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb /var/run/Xvfb.pid
  38. echo
  39. ;;
  40. restart|reload)
  41. $0 stop
  42. $0 start
  43. RETVAL=$?
  44. ;;
  45. status)
  46. status Xvfb
  47. RETVAL=$?
  48. ;;
  49. *)
  50. echo $"Usage: $0 (start|stop|restart|reload|status)"
  51. exit 1
  52. esac
  53. exit $RETVAL
  54. Registering in system and start:
  55. chmod +x /etc/init.d/xvfb
  56. chkconfig xvfb on
  57. service xvfb start
  58. now
  59. export DISPLAY=:7 (actually you should add this to your etc/bashrc)

selenium 脚本测试一下环境:

随便丢个简单的selenium 写的脚本到配制好的测试机子上运行,如果没有任何报错,说明环境就是配制Ok的。

参考资料:

http://rrroutes.blogspot.com/2013/04/settup-environment-for-selenium-tests.html

http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/

http://ralf.schaeftlein.de/2012/05/26/running-headless-webdriver-based-selenium-junit-tests-inside-jenkins-under-ubuntu-linux/

https://gist.github.com/textarcana/5855427

http://stackoverflow.com/questions/17944234/xlib-extension-randr-missing-on-display-21-trying-to-run-headless-googl

XVFB实现selenium在linux上无界面运行安装篇的更多相关文章

  1. matlab linux下无界面运行

    今日做吸引域的仿真,由于需要遍历100*100*100的空间,需要的时间比较长,发现程序没运行一段时间,就会出现Out of memory的错误,而且出错的部分在于截取figure内部图片的部分. 开 ...

  2. 第三百五十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—chrome谷歌浏览器无界面运行、scrapy-splash、splinter

    第三百五十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—chrome谷歌浏览器无界面运行.scrapy-splash. splinter 1.chrome谷歌浏览器无界面运行 chrome ...

  3. 三十一 Python分布式爬虫打造搜索引擎Scrapy精讲—chrome谷歌浏览器无界面运行、scrapy-splash、splinter

    1.chrome谷歌浏览器无界面运行 chrome谷歌浏览器无界面运行,主要运行在Linux系统,windows系统下不支持 chrome谷歌浏览器无界面运行需要一个模块,pyvirtualdispl ...

  4. centos 无界面 服务器 安装chrome部署chromedriver

    转:https://blog.csdn.net/u013849486/article/details/79466359 基本 做完了,要弄进docker里面去了的时候,才搜到 docker-chrom ...

  5. 在Linux上显示正在运行的进程的线程ID

    在Linux上显示正在运行的进程的线程ID 在上Linux," ps -T"可以显示正在运行的进程的线程信息: # ps -T 2739 PID SPID TTY STAT TIM ...

  6. linux无界面模式安装selenium+chrome+chromedriver并成功完成脚本(亲测可用)

    环境:docker centos 7.4 能通外网 写好的selenium脚本. 具体步骤: 一:安装selenium  这是最简单的 直接利用 pip3 install selenium 二 安装c ...

  7. 无界面运行Jmeter压测脚本 --后知者

    原文作者---后知者 原文地址:http://www.cnblogs.com/houzhizhe/p/8119735.html [后知者的故事]:针对单一接口压测时出现了从未遇到的问题,设好并发量后用 ...

  8. 无界面运行Jmeter压测脚本

    今天在针对单一接口压测时出现了从未遇到的问题,设好并发量后用调度器控制脚本的开始和结束,但在脚本应该自动结束时间,脚本却停不下来,手动stop报告就会有error率,卡了我很久很久不能解决,网络上也基 ...

  9. 在 linux 上部署并运行 JavaFX 项目

    环境 redhat 6.4.eclipse安装JavaFX插件 项目详情及代码参见 在linux上配置并创建JavaFX项目 ,该部署即此文章中项目的部署 配置build.fxbuild 生成buil ...

随机推荐

  1. 2016 版 Laravel 系列入门教程

    2016 版 Laravel 系列入门教程 (1) - (5) http://www.golaravel.com/post/2016-ban-laravel-xi-lie-ru-men-jiao-ch ...

  2. 当mysql 遇到 ctrl+c

    目的 为了理解MySQL在执行大SQL时,对执行CTRL+C产生的疑惑,本文通过实验测试和源码分析两个方面,对MySQL处理CTRL+C的详细过程进行分析和讲解,从而解除DBA及开发人员对CTRL+C ...

  3. SQL-修改表名,列名

    sql 1.sql server修改表名.列名 修改表名:EXEC sp_rename ‘原有表名’, '新表名'; 修改列名:EXEC sp_rename ‘表名.[原有列名]’, ‘新列名' , ...

  4. 019.Zabbix的Trigger及相关函数

    一 告警简介 告警指将达到某一个阀值事件的消息发送给用户,让用户在事件发生的时候即可知道监控项处于不正常状态,从而采取相应的措施.在Zabbix中,高进是由一系列的流程组成,首先是触发器达到阀值,接下 ...

  5. 聊聊zookeeper的分布式锁

    分布式锁就是多台机器,分布在不同的JVM中,这些不同JVM内的方法需要获取一个唯一锁,比如获取锁之后要把数据写入数据库,保证数据在同一时刻只有一台机器写入数据库. 分布式锁的实现有多种实现方法,除了今 ...

  6. 开发一个简单的babel插件

    前言 对于前端开发而言,babel肯定是再熟悉不过了,工作中肯定会用到.除了用作转换es6和jsx的工具之外,个人感觉babel基于抽象语法树的插件机制,给我们提供了更多的可能.关于babel相关概念 ...

  7. python django + js 使用ajax进行文件上传并获取上传进度案例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. android 对称加密,非对称加密 android 常见的加密

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha android 常见的加密 ======== 不可逆加密:md5,sha1 可逆的加密中 ...

  9. P4811 C’s problem(c)

    P4811 C’s problem(c)From: admin 时间: 1000ms / 空间: 65536KiB / Java类名: Main 背景 清北NOIP春季系列课程 描述 题目描述 小C是 ...

  10. BZOJ2911 : [Poi1997]The Number of Symmetrical Choices

    新建源汇S,T,根据题意可以建出一个DAG 设f[x][y]为从x走到y的回文路径的方案数,则 边界条件: f[x][x]=1 对于一条边x->y,若a[x]==a[y],则f[x][y]=1 ...