php+phantomjs获取网页渲染后的内容,使用jonnyw/php-phantomjs获取网页渲染后的内容

注意:本文是在windows2019系统下运行,本人亲测有效,其他环境未进行验证

2022.6.26 windows2022也进行了测试,要稍微多一点东西,本文也进行了说明

2022.7.15 测试了php8.0,一切正常

1、配置系统环境

新系统windows2019→安装宝塔→安装iis+php7.4→创建网站

2、安装phantomjs

参考下面教程进行安装

这里需要记录下phantomjs的安装路径,后续程序里面需要用到

3、使用composer安装jonnyw/php-phantomjs

①安装composer

参考下面教程

②安装jonnyw/php-phantomjs

特别注意:要使用composer进行安装,需要进入php7.4删除禁用函数putenv,不然会出现下面错误

php+phantomjs获取网页渲染后的内容,使用jonnyw/php-phantomjs获取网页渲染后的内容

参考网址:https://jonnnnyw.github.io/php-phantomjs/

a.打开Windows PowerShell,并进入到网站根目录下

cd d:/wwwroot/ceshi

b.运行命令安装jonnyw/php-phantomjs

注意:如果系统是windows2022,就需要去删除禁用函数proc_get_status,不然会出现下面的错误

php+phantomjs获取网页渲染后的内容,使用jonnyw/php-phantomjs获取网页渲染后的内容

然后输入下面的命令

composer require "jonnyw/php-phantomjs:4.*"

安装成功如下

php+phantomjs获取网页渲染后的内容,使用jonnyw/php-phantomjs获取网页渲染后的内容

安装成功后网站根目录下面会多一个vendor文件夹,里面包含的内容如下

php+phantomjs获取网页渲染后的内容,使用jonnyw/php-phantomjs获取网页渲染后的内容

4、测试jonnyw/php-phantomjs是否安装成功

①在网站根目录新建一个php文件,命名为ceshi.php,添加下面的代码到php文件中

注意:这个时候需要去删除禁用函数proc_open,不然会出错,具体会出现的错误可以看后面

<?php

require 'vendor/autoload.php';
use JonnyW\PhantomJs\Client;

$client = Client::getInstance();
$client->getEngine()->setPath('D:\ruanjian\phantomjs-2.1.1-windows\bin\phantomjs.exe'); //这里的路径为你实际安装phantomjs的位置,请根据需要修改

$client->getEngine()->addOption('--load-images=true'); //设为false表示禁止加载图片
$client->getEngine()->addOption('--ignore-ssl-errors=true'); //忽略ssl错误
//具体设置,参考网址https://phantomjs.org/api/command-line.html进行添加

$link = 'https://www.binbinbiji.com/'; //需要请求渲染的网址

$request  = $client->getMessageFactory()->createRequest();
$response = $client->getMessageFactory()->createResponse();


//$request->addSetting('userAgent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36');//设置ua,上面和下面方法都行
$request->addHeader('user-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'); //设置UA,上面和下面方法都行
$request->addHeader('cookie', ''); //设置cookie

$client->isLazy(); // 让客户端等待所有资源加载完毕
$request->setTimeout(30000); // 设置超时时间(超过这个时间停止加载并渲染输出画面)

$request->setMethod('GET'); //设置请求方法
$request->setUrl($link); //设置请求连接
$client->send($request, $response); //发送请求获取响应

//echo $response->isRedirect(); //网站是否有跳转
//echo $response->getRedirectUrl(); //获取跳转后的网址

echo $response->getContent(); //输出渲染后的源码内容
/*
if($response->getStatus() === 200) {
    //输出抓取内容
    echo $response->getContent();
    //获取内容后的处理
}*/ //如果注释掉上面的输出,启用下面的,就必须状态码为200的才行,就不能获取到跳转后的内容了。

②浏览器中打开网址,出现下面错误

php+phantomjs获取网页渲染后的内容,使用jonnyw/php-phantomjs获取网页渲染后的内容
Warning: proc_open() has been disabled for security reasons in D:\wwwroot\ceshi\vendor\jonnyw\php-phantomjs\src\JonnyW\PhantomJs\Procedure\Procedure.php on line 107

Fatal error: Uncaught JonnyW\PhantomJs\Exception\ProcedureFailedException: Error when executing PhantomJs procedure - proc_open() did not return a resource in D:\wwwroot\ceshi\vendor\jonnyw\php-phantomjs\src\JonnyW\PhantomJs\Procedure\Procedure.php:138 Stack trace: #0 D:\wwwroot\ceshi\vendor\jonnyw\php-phantomjs\src\JonnyW\PhantomJs\Procedure\ProcedureValidator.php(84): JonnyW\PhantomJs\Procedure\Procedure->run(Object(JonnyW\PhantomJs\Procedure\Input), Object(JonnyW\PhantomJs\Procedure\Output)) #1 D:\wwwroot\ceshi\vendor\jonnyw\php-phantomjs\src\JonnyW\PhantomJs\Procedure\ProcedureValidator.php(61): JonnyW\PhantomJs\Procedure\ProcedureValidator->validateSyntax('\n\n/**\n * Set up...') #2 D:\wwwroot\ceshi\vendor\jonnyw\php-phantomjs\src\JonnyW\PhantomJs\Procedure\ProcedureCompiler.php(107): JonnyW\PhantomJs\Procedure\ProcedureValidator->validate('\n\n/**\n * Set up...') #3 D:\wwwroot\ceshi\vendor\jonnyw\php-phantomjs\src\JonnyW\PhantomJs\Client.php(160): JonnyW\PhantomJs\Procedure\ProcedureCompiler->compile(Object(JonnyW\P in D:\wwwroot\ceshi\vendor\jonnyw\php-phantomjs\src\JonnyW\PhantomJs\Procedure\Procedure.php on line 138

意思是proc_open函数被禁用了,我们去php7.4里面删除禁用函数proc_open就行了

php+phantomjs获取网页渲染后的内容,使用jonnyw/php-phantomjs获取网页渲染后的内容

③再次打开网址,这个时候网站正常打开可以访问了,安装成功

php+phantomjs获取网页渲染后的内容,使用jonnyw/php-phantomjs获取网页渲染后的内容

到此为止。

发布者:彬彬笔记,转载请注明出处:https://www.binbinbiji.com/php/2479.html

(2)
彬彬笔记彬彬笔记
上一篇 2022年6月21日 19:17
下一篇 2022年6月27日 13:33

相关推荐

发表回复

登录后才能评论
蜀ICP备14017386号-13