@@ -4,7 +4,8 @@ webman的爬山虎插件,[PHPCreeper | 爬山虎](https://github.com/blogdaren
44
55
66## 更新
7- 本插件的使用说明最近一次更新时间是:2024-03-21,由于爬山虎迭代版新增了许多新特性和API,而且完全向下兼容,所以建议将本插件和爬山虎引擎更新到最新版。
7+ * 本插件的使用说明最近一次更新时间是:** 2024-04-27** ,由于爬山虎迭代版新增了许多新特性和API,而且完全向下兼容,所以建议将本插件和爬山虎引擎更新到最新版。
8+ * 重大更新:自** 爬山虎v1.8.7版本** 开始,爬山虎已经支持无头浏览器即支持运行JavaScript代码及其渲染的动态页面。使用非常简单,无缝切换,只需要通过$context上下文启用或禁用无头浏览器开关即可。
89
910
1011## 安装
@@ -18,7 +19,8 @@ composer require blogdaren/webman-phpcreeper
1819* 由于爬虫应用相对WEB应用而言比较独立,所以app内的爬虫目录结构建议自行独立部署。
1920* 首先在自己的app项目下手动创建有效的爬虫目录, 比如:app/spider。
2021* 然后在爬虫目录内(app/spider)创建相应的容器句柄类Hanlder。
21- * 最后在对应容器内的` onXXXX ` 回调方法内编写业务逻辑.
22+ * 最后在对应容器内的` onXXXX ` 回调方法内编写业务逻辑。
23+ * 若启用无头开关,默认使用无头chrome驱动,否则使用默认的guzzle驱动,若爬取的不是动态页,建议禁用。
2224
2325## 举个例子
2426
@@ -66,17 +68,17 @@ class Myproducer extends \Webman\PHPCreeper\Producer
6668 //自v1.6.0开始,爬山虎提供了更加短小便捷的API来创建任务, 而且参数类型更加丰富:
6769 //注意:仅仅只是扩展,原有的API依然可以正常使用,提倡扩展就是为了保持向下兼容。
6870 //1. 单任务API:$task参数类型可支持:[字符串 | 一维数组]
69- //1 . 单任务API:$producer->createTask($task);
70- //2 . 多任务API:$task参数类型可支持:[字符串 | 一维数组 | 二维数组]
71- //2 . 多任务API:$producer->createMultiTask($task);
71+ //2 . 单任务API:$producer->createTask($task);
72+ //3 . 多任务API:$task参数类型可支持:[字符串 | 一维数组 | 二维数组]
73+ //4 . 多任务API:$producer->createMultiTask($task);
7274
7375 //使用字符串:不推荐使用,配置受限,需要自行处理抓取结果
7476 //$task = "http://www.weather.com.cn/weather/101010100.shtml";
7577 //$producer->createTask($task);
7678 //$producer->createMultiTask($task);
7779
7880 //任务私有context,其上下文成员与全局context完全相同,最终会采用合并覆盖策略
79- $task_private_context = array(
81+ $private_task_context = array(
8082 //是否缓存下载数据(可选项,默认false)
8183 'cache_enabled' => true,
8284 //缓存下载数据存放目录 (可选项,默认位于系统临时目录下)
@@ -103,6 +105,10 @@ class Myproducer extends \Webman\PHPCreeper\Producer
103105 //除了内置参数之外,还可以自由配置自定义参数,在上下游业务链应用场景中十分有用
104106 'user_define_arg1' => 'user_define_value1',
105107 'user_define_arg2' => 'user_define_value2',
108+ //无头浏览器,如果是动态页面考虑启用,否则应当禁用 [默认使用chrome且为禁用状态]
109+ 'headless_browser' => [
110+ 'headless' => false,
111+ ],
106112 //更多参数请参看手册
107113 );
108114
@@ -121,7 +127,7 @@ class Myproducer extends \Webman\PHPCreeper\Producer
121127 'refer' => '',
122128 'type' => 'text', //可以自由设定类型
123129 'method' => 'get',
124- 'context' => $task_private_context , //任务私有context,其上下文成员与全局context完全相同,最终会采用合并覆盖策略
130+ 'context' => $private_task_context , //任务私有context,其上下文成员与全局context完全相同,最终会采用合并覆盖策略
125131 );
126132
127133 $this->createTask($task);
@@ -277,6 +283,42 @@ class Mydownloader extends \Webman\PHPCreeper\Downloader
277283 {
278284 //pprint($downloader->getDbo('test'), __METHOD__);
279285 }
286+
287+ /**
288+ * @brief onTaskEmpty
289+ *
290+ * @param object $downloader
291+ *
292+ * @return mixed
293+ */
294+ public function onTaskEmpty($downloader)
295+ {
296+ //$downloader->createTask($task);
297+ }
298+
299+ /**
300+ * @brief onHeadlessBrowserOpenPage
301+ *
302+ * @param object $downloader
303+ * @param object $browser
304+ * @param object $page
305+ * @param string $url
306+ *
307+ * @return mixed
308+ */
309+ public function onHeadlessBrowserOpenPage($downloader, $browser, $page, $url)
310+ {
311+ //注意:灵活设计特定类型的返回值有助于对付各种复杂的应用场景
312+ //1. 返回false, 会触发中断后续的业务逻辑;
313+ //2. 返回string,会触发中断后续的业务逻辑,一般多用于返回页面的HTML;
314+ //3. 返回array, 会继续执行后续的业务逻辑,一般多用于返回无头浏览器选项参数;
315+ //4. 返回其他, 会继续执行后续的业务逻辑,相当于是什么也没有发生;
316+
317+ //注意:一般无需调用如下几行代码,因为爬山虎内部默认会自动调用无头API做同样的工作.
318+ //$page->navigate($url)->waitForNavigation('firstMeaningfulPaint');
319+ //$html = $page->getHtml();
320+ //return $html;
321+ }
280322}
281323```
282324
0 commit comments