美文网首页
CentOS 6.x 搭建:Headless Chrome +

CentOS 6.x 搭建:Headless Chrome +

作者: 后端老鸟 | 来源:发表于2020-08-09 10:44 被阅读0次

    【转载请注明出处】:https://blog.csdn.net/huahao1989/article/details/107890747

    Chrome官方网站已经说的很清楚,不再支持6.x的CentOS,至少7以上。 可是很多时候我们使用的服务器版本并不能随便升级,即便已经很难受了,但是还得继续使用低版本,装起来那是真叫一个费劲,还好就是费劲一些,最终还是可以装成功的。

    什么是 Headless Chrome

    Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。相比于出道较早的 PhantomJS,SlimerJS 等,Headless Chrome 则更加贴近浏览器环境。

    CentOS版本

    lsb_release -a
    
    image.png

    最新版本Google-Chrome安装

    CentOS/RedHat 7以上安装google-chrome可以完全参考https://intoli.com/blog/installing-google-chrome-on-centos/ (6及以下版本不适用)。

    指定yum源

    服务器应该指定合适yum源,避免找不到某些依赖的尴尬。
    修改 /etc/yum.repos.d/CentOS-Base.repo,可以使用阿里的yum repo:

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    yum clean all
    
    安装google-chrome

    根据https://intoli.com/blog/installing-google-chrome-on-centos/ ,执行命令:

    curl https://intoli.com/install-google-chrome.sh | bash
    

    脚本会自动检测当前版本安装chrome所缺失的依赖包并下载。


    image.png

    检查是否还缺乏依赖:

    ldd /opt/google/chrome/chrome | grep "not found"
    

    返回为空,说明CentOS下chrome依赖问题基本解决。

    运行chrome

    执行

    google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot https://www.suning.com/。
    

    访问成功,在当前目录会生成截图screenshot.png,如果报错

    [0100/000000.311368:ERROR:broker_posix.cc(43)] Invalid node channel message
    

    则需要安装依赖包:

    yum install  \
     ipa-gothic-fonts \
     xorg-x11-fonts-100dpi \
     xorg-x11-fonts-75dpi \
     xorg-x11-utils \
     xorg-x11-fonts-cyrillic \
     xorg-x11-fonts-Type1 \
     xorg-x11-fonts-misc -y 
    

    最新版本Chromedriver安装

    当前的chrome版本是 google-chrome-stable-72.0.3626.109-1.x86_64,chromedrive的官网是https://sites.google.com/a/chromium.org/chromedriver/downloads

    image.png
    下载地址https://chromedriver.storage.googleapis.com/2.46/chromedriver_linux64.zip
    或者选择taobao镜像下载http://npm.taobao.org/mirrors/chromedriver/
    镜像下载地址http://npm.taobao.org/mirrors/chromedriver/2.46/chromedriver_linux64.zip

    解压后部署到/opt/drivers目录下,尝试运行:

    ./chromedriver 
    Starting ChromeDriver 72.0.3626.7 (efcef9a3ecda02b2132af215116a03852d08b9cb) on port 9515
    Only local connections are allowed.
    [1550143530.011][SEVERE]: CreatePlatformSocket() returned an error, errno=0: Address family not supported by protocol (97)
    

    另外要修改/etc/hosts,绑定127.0.0.1 localhost,否则,Java Selenium运行时chromedriver可能因为找不到localhost报超时异常

    安装selenium

    • 安装 Python 并配置好环境变量
      shell输入:python -V 出现对应版本号即安装成功!
    • 安装 pip
      python默认自带 pip 在安装目录的scripts目录下,自行配置至环境变量即可,配置好后shell输入:pip -V 出现对应版本号即安装成功!
    • 安装 selenium
      shell输入:pip install selenium 提示:Successfully installed selenium-即安装成功!
    python
    >>>from selenium import webdriver
    >>>driver = webdriver.Chrome()
    >>>driver.get('https://www.baidu.com')
    

    已经可以了,正常写python脚本即可。

    搭建环境时遇到的问题

    1、/lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./chromedriver)

    #查看系统版本
    cat /etc/redhat-release 
    #查看glibc支持的版本
    strings /lib64/libc.so.6 |grep GLIBC_
    
    wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz 
    wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.gz 
    tar -xvf  glibc-2.14.tar.gz 
    tar -xvf  glibc-ports-2.14.tar.gz
    mv glibc-ports-2.14 glibc-2.14/ports
    mkdir glibc-2.14/build
    cd glibc-2.14/build 
    ../configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
    make
    make install 
    

    安装编译过程中需要注意三点:

    • 要将glibc-ports解压到glibc目录下
    • 不能在glibc当前目录下运行configure
    • 加上优化开关,export CFLAGS="-g -O2 -march=i486",否则会出现错误
    • 在make install过程中可能会出现 nss_test1加载不了的情况, 此时可以将加载libnss_test1.so.2的地方注释掉,用grep "nss_test1" . -nr命令在 /glibc目录下查找一下,加载的地方也不多(这只是一个测试nss的静态库,可以不要)

    2、/lib64/libc.so.6: version `GLIBC_2.16' not found (required by ./chromedriver)

    wget http://ftp.gnu.org/gnu/glibc/glibc-2.16.0.tar.gz 
    wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.16.0.tar.gz 
    tar -xvf  glibc-2.16.0.tar.gz 
    tar -xvf  glibc-ports-2.16.0.tar.gz
    mv glibc-ports-2.16.0 glibc-2.16.0/ports
    mkdir glibc-2.16.0/build
    cd glibc-2.16.0/build 
    ../configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
    make
    make install 
    

    报错

    Unmatched ( in regex; marked by  HERE in m/$( <-- HERE if $(abi-64-ld-soname),$(abi-64-ld-soname),ld/ at scripts/test-installation.pl line
    

    可以参考解决办法https://sourceware.org/bugzilla/attachment.cgi?id=6616&action=diff

    • glibc-2.16.0/Makefile
    ifeq (,$(install_root))
          CC="$(CC)" $(PERL) scripts/test-installation.pl $(common-objpfx)
    endif
    

    改成

    ifeq (,$(install_root))
         LD_SO=$(ld.so-version) CC="$(CC)" $(PERL) scripts/test-installation.pl $(common-objpfx)
    endif
    
    • glibc-2.16.0/scripts/test-installation.pl
    sub usage {
        print "Usage: test-installation [soversions.mk]\n";
    

    上面添加

    if ($ENV{LD_SO}) {
      $LD_SO = $ENV{LD_SO};
    } else {
      $LD_SO= "";
    }
    
    sub usage {
        print "Usage: test-installation [soversions.mk]\n";
    

    } else {
      if (/^ld\.so/) {
         ($ld_so_name, $ld_so_version)= /=(.*)\.so\.(.*)$/;
    

    上面添加

    } elsif ($LD_SO ne "") {
        ($ld_so_name, $ld_so_version) = split ('\.so\.', $LD_SO);
    } else {
      if (/^ld\.so/) {
         ($ld_so_name, $ld_so_version)= /=(.*)\.so\.(.*)$/;
    

    欢迎关注 “后端老鸟” 公众号,接下来会发一系列的专题文章,包括Java、Python、Linux、SpringBoot、SpringCloud、Dubbo、算法、技术团队的管理等,还有各种脑图和学习资料,NFC技术、搜索技术、爬虫技术、推荐技术、音视频互动直播等,只要有时间我就会整理分享,敬请期待,现成的笔记、脑图和学习资料如果大家有需求也可以公众号留言提前获取。由于本人在所有团队中基本都处于攻坚和探路的角色,搞过的东西多,遇到的坑多,解决的问题也很多,欢迎大家加公众号进群一起交流学习。

    【转载请注明出处】:https://blog.csdn.net/huahao1989/article/details/107890747

    image

    相关文章

      网友评论

          本文标题:CentOS 6.x 搭建:Headless Chrome +

          本文链接:https://www.haomeiwen.com/subject/clqkeqtx.html