CentOS 6.x 搭建:Headless Chrome + ChromeDriver + Selenium基于浏览器的爬虫环境

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

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

相关文章
|
16天前
|
Web App开发 数据采集 存储
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
本文探讨了如何利用Chrome DevTools Protocol (CDP) 与 Selenium WebDriver 提升浏览器自动化效率,结合代理IP技术高效采集微博数据。通过CDP,开发者可直接操作浏览器底层功能,如网络拦截、性能分析等,增强控制精度。示例代码展示了如何设置代理IP、cookie及user-agent来模拟真实用户行为,提高数据抓取成功率与稳定性。适用于需要频繁抓取互联网数据的应用场景。
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
|
9天前
|
Web App开发 存储 前端开发
Chrome浏览器的跨域问题
Chrome浏览器的跨域问题
|
1月前
|
Web App开发
Chrome——谷歌浏览器chrome如何模拟其他客户端
Chrome——谷歌浏览器chrome如何模拟其他客户端
75 1
Chrome——谷歌浏览器chrome如何模拟其他客户端
|
26天前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
44 1
|
1月前
|
Web App开发 JSON 安全
【跨域难题终结者】:一键解锁Chrome浏览器神秘设置,彻底告别开发阶段的跨域烦恼!
【8月更文挑战第20天】跨域是前端开发常遇难题,尤其在前后端分离项目中。浏览器因安全考量会阻止不同源间的请求。本文对比CORS、JSONP、代理服务器等解法,并介绍开发阶段通过调整Chrome设置来临时禁用跨域限制的方法,提供启动Chrome及使用`fetch`API示例,适合快速测试。但请注意这不适用于生产环境,存在一定安全风险。
113 1
|
1月前
|
Web App开发
成功解决Chrome浏览器 控制台下看不到接口信息的问题
这篇文章提供了解决Chrome浏览器控制台不显示接口信息问题的方法,包括检查过滤设置和确保“保留日志”开关已打开。
成功解决Chrome浏览器 控制台下看不到接口信息的问题
|
1月前
|
Web App开发 前端开发 JavaScript
手摸手教你,从0到1开发一个Chrome浏览器插件
开发 Chrome 插件既有趣又具成就感。本教程将引导你从零开始,逐步创建一个简单的 Chrome 插件。首先了解 Chrome 插件是可增强浏览器功能的小程序。以一个基础示例开始,你将学习如何设置开发环境,包括安装 Chrome 和准备文本编辑器,并掌握 HTML、CSS 和 JavaScript 的基础知识。接着,我们将构建插件的基本结构,涉及 `manifest.json` 配置文件、`background.js` 后台脚本、`popup.html` 用户界面以及 `style.css` 样式表。
141 8
|
1月前
|
Web App开发
Chrome浏览器导出HTTPS证书
Chrome浏览器导出HTTPS证书
39 0
Chrome浏览器导出HTTPS证书
|
20天前
|
Android开发 iOS开发 C#
Xamarin.Forms:从零开始的快速入门指南——打造你的首个跨平台移动应用,轻松学会用C#和XAML构建iOS与Android通用界面的每一个步骤
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程并保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用演示了 Xamarin.Forms 的基本功能和工作原理。
30 0
|
21天前
|
Web App开发 缓存 前端开发
哇塞!Chrome 浏览器竟有四大神秘进程,带你探秘互联网世界的强大引擎!
【8月更文挑战第31天】Chrome浏览器因其快速稳定的表现深受用户喜爱,其背后是四大独特多进程架构的支持:浏览器主进程管理界面与进程协调;网络进程处理网络请求及缓存;渲染进程将网页内容转化为可视化页面;插件进程则确保各类插件如Flash Player的安全稳定运行。通过这些进程间的高效协作,Chrome实现了流畅、稳定的上网体验。例如,在访问新闻网站时,各进程协同工作,确保网页内容顺利加载和显示。理解这些进程有助于提升使用体验并有效解决问题。
34 0