乐趣区

关于chrome:CentOS-6x-搭建Headless-Chrome-ChromeDriver-Selenium的爬虫环境

【转载请注明出处】: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

最新版本 Google-Chrome 装置

CentOS/RedHat 7 以上装置 google-chrome 能够齐全参考 https://intoli.com/blog/insta…(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/insta…,执行命令:

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

脚本会自动检测以后版本装置 chrome 所缺失的依赖包并下载。

查看是否还不足依赖:

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/ch…

下载地址 https://chromedriver.storage….
或者抉择 taobao 镜像下载 http://npm.taobao.org/mirrors…
镜像下载地址 http://npm.taobao.org/mirrors…

解压后部署到 /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/bugzil…

  • 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

退出移动版