当前位置:首页 > 大杂烩 > 正文内容

centos Chrome Headless,centos 谷歌无头浏览器

高老师4年前 (2020-10-01)大杂烩1688

1.什么是Chrome Headless?

Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序,简而言之,除了没有图形界面,headless chrome具有所有现代浏览器的特性,可以像在其他现代浏览器里一样渲染目标网页,并能进行网页截图,获取cookie,获取html等操作。 而对于写爬虫的同学,很多都会面临都一个问题,那就是数据都是通过动态渲染,甚至是加密得到的,普通的分析接口模式早已无法满足需求,因此我们引入Chrome Headless 来解决数据渲染问题。

2.安装谷歌浏览器

创建谷歌源文件

cd /etc/yum.repos.d/
vi google-chrome.repo
[google-chrome]name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1gpgcheck=1gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

安装

yum -y install google-chrome-stable --nogpgcheck

验证安装

google-chrome -version

输出版本Google Chrome 85.0.4183.121

测试访问网页:

google-chrome --headless --disable-gpu --print-to-pdf http://www.baidu.com --no-sandbox

访问成功并保存了访问的pdf结果截图

3. 安装谷歌浏览器驱动,用最新版

虽然下载需要梯子,但是伟大的阿里云提供了国内镜像:

http://npm.taobao.org/mirrors/chromedriver/

wget http://npm.taobao.org/mirrors/chromedriver/85.0.4183.87/chromedriver_linux64.zip

这个驱动其实就是一个单文件,提供一个端口让你给它发送指令,它来操作浏览器,验证下是否有效:

./chromedriver  --port=4444
Starting ChromeDriver 85.0.4183.87 (cd6713ebf92fa1cacc0f1a598df280093af0c5d7-refs/branch-heads/4183@{#1689}) on port 4444

启动成功,监听4444端口,为啥用4444端口,因为调用demo用这个,可以自定义你随意,如果报错“error while loading shared libraries: libgconf-2.so.4: cannot open shared object file”执行下依赖安装

yum install GConf2

把驱动加到环境变量

mv  /root/chromedriver /opt/google/chromedriver
ln -s /opt/google/chromedriver /usr/bin/chromedriver

4.安装selenium(selenium封装了谷歌驱动相关的协议)(非必须)

selenium相当于谷歌驱动的客户端,调用谷歌驱动,谷歌驱动再去调用谷歌浏览器。

如果你的客户端代码支持直接连接谷歌驱动就没有必要再安装这个。安装这个也没事,可以测试下直接连接谷歌驱动和selenium哪个快点

selenium依赖java8,一键安装java8

yum -y install java-1.8.0-openjdk-devel.x86_64

下载selenium(http://selenium-release.storage.googleapis.com/index.html)自己选择最新版本

wget http://selenium-release.storage.googleapis.com/3.9/selenium-server-standalone-3.9.1.jar

启动selenium+设置驱动(如果你把驱动加入到环境变量中则不需要这一步)

java -Dwebdriver.chrome.driver="/root/chromedriver" -jar  ./selenium-server-standalone-3.9.1.jar

占用一个4444端口

5.客户端代码走一波,用世界上最好的语言测试下:

composer 加载下客户端库:

"php-webdriver/webdriver": "*"

客户端代码访问百度:

//驱动监听地址
$host = 'http://localhost:4444';

//创建谷歌驱动配置器
$options = new ChromeOptions();
$options->addArguments(['--headless', '--disable-gpu', '--no-sandbox']);
$options->setBinary('/opt/google/chrome/google-chrome');
$desiredCapabilities = DesiredCapabilities::chrome();
$desiredCapabilities->setCapability(ChromeOptions::CAPABILITY, $options);
//创建谷歌驱动(包还支持其他驱动,例如火狐)
$driver = RemoteWebDriver::create($host, $desiredCapabilities, 3600000, 3600000);

//打开页面
$driver->get('http://www.baidu.com'); //自动打开的网页地址

//等待页面加载完成
try
{
    $driver->wait()->until(
        WebDriverExpectedCondition::titleContains('Revision history')
    );
}
catch (\Facebook\WebDriver\Exception\NoSuchElementException $e)
{
    echo $e->getMessage() . PHP_EOL;
}
catch (\Facebook\WebDriver\Exception\TimeoutException $e)
{
    echo $e->getMessage() . PHP_EOL;
}

echo "网页标题:" . $driver->getTitle() . PHP_EOL;

//关闭浏览器
$driver->quit();

谷歌驱动和selenium连接唯一不同的就是端口和路由,具体看下composer对应的github库文档说明即可。

需要注意的是谷歌驱动和谷歌浏览器版本都用最新的,版本要对上,驱动参数要正确--headless  --disable-gpu --no-sandbox ,还有上面的3600000超时问题设置

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:http://blog.20230611.cn/post/579.html

分享给朋友:

“centos Chrome Headless,centos 谷歌无头浏览器” 的相关文章

Git从远程仓库更新文件

Git从远程仓库更新文件

 git   pull  https://git.oschina.net/392223903/learn.git   master   换为您的git地址...

Git日志查看和版本切换

Git日志查看和版本切换

日志查看:git log版本切换:方式1:git  reset  --hard  HEAD^   倒退一个版本git  reset  --hard  HEAD^^  倒退两个版本方式2:(版本号的形式,建议版本号码补充完...

C# md5加密,C# md5加密代码

C# md5加密,C# md5加密代码

public static string GetMD5(string str) {     //创建MD5对象     MD5 md5 = MD5.C...

c#中文简体转换繁体

c#中文简体转换繁体

private const string fantizi = "高久峰是個程序員"; private const string jiantizi = "高久峰是个程序员...

IE浏览器无法显示此页解决方案

IE浏览器无法显示此页解决方案

方案1.IE浏览器"无法显示此页"的解决办法(1).按下Win+R键打开运行,输入netsh winsock reset,回车;(2).重启即可. 方案2.IE浏览器"无法显示此页"的解决办法 (1).设置-连接-局域网设置-自动检测设置开...

IIS7.0无法加载CSS的处理办法

IIS7.0无法加载CSS的处理办法

首先网页全部是纯静态的文件,本地测试正常访问,服务器端无法加载CSS,并且无法查看CSS文件的内容。 解决方案:关闭网站的压缩->>静态压缩和动态压缩...