helloiamlukas/laravel-chrome

此包已被放弃且不再维护。未建议替代包。

Laravel 的 Chrome Headless 封装。获取任何网页的 DOM。

v2.0 2018-05-27 21:17 UTC

This package is auto-updated.

Last update: 2021-09-16 19:48:49 UTC


README

Build Status StyleCI

使用无头 Chrome 获取任何网页的 DOM。

💡 这是一个 helloiamlukas/chrome-php 的 Laravel 封装。

要求

此包需要 Puppeteer Chrome Headless Node 库

如果您想在 Ubuntu 16.04 上安装它,可以这样操作

sudo apt-get update
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
sudo npm install --global --unsafe-perm puppeteer
sudo chmod -R o+rx /usr/lib/node_modules/puppeteer/.local-chromium

安装

您可以通过运行以下命令安装此包

composer require helloiamlukas/laravel-chrome

之后,该包将自动注册自己。

要发布配置文件,您需要运行

php artisan vendor:publish --provider="ChromeHeadless\ChromeHeadlessServiceProvider"

这将创建一个配置文件在 config/chrome.php

配置

配置文件位于 config/chrome.php

自定义 Chrome 路径

您可以指定 Chrome 安装的路径。

/*
|--------------------------------------------------------------------------
| Chrome Path
|--------------------------------------------------------------------------
|
| Manually set the path where Google Chrome is installed.
|
*/
'exec_path' => '/path/to/chrome',

自定义用户代理

您可以指定自定义用户代理。默认情况下将使用标准的 Chrome Headless 用户代理。

/*
|--------------------------------------------------------------------------
| User Agent
|--------------------------------------------------------------------------
|
| Change the user agent that will be used by Google Chrome.
|
*/
'user_agent' => 'nice-user-agent',

超时

您可以指定一个超时时间,超时后进程将被终止。超时时间应以秒为单位。

/*
|--------------------------------------------------------------------------
| Timeout
|--------------------------------------------------------------------------
|
| Specify a timeout in seconds.
| (null = no timeout)
|
*/
'timeout' => 10,

如果进程超时,将抛出 Symfony\Component\Process\Exception\ProcessTimedOutException

视口

您可以在发出请求时指定自定义视口。默认情况下将使用 800x600px 的 Chrome Headless 标准。

/*
|--------------------------------------------------------------------------
| Viewport
|--------------------------------------------------------------------------
|
| Specify a viewport.
|
*/
'viewport' => [
                    'width' => 1920,
                    'height' => 1080
                ],

黑名单

您可以为不应加载的文件指定正则表达式列表。这些表达式将与文件的 URL 进行检查。

/*
|--------------------------------------------------------------------------
| Blacklist
|--------------------------------------------------------------------------
|
| Specify a list of files that should not be loaded.
|
*/
'blacklist' => [
                    'www.google-analytics.com',
                    'analytics.js'
                ],

自定义头信息

您可以指定用于请求的自定义头信息。

/*
|--------------------------------------------------------------------------
| Additional Request Headers
|--------------------------------------------------------------------------
|
| Specify additional headers.
|
*/
'headers' => [
                'DNT' => 1 // DO NOT TRACK
             ],

用法

以下是如何使用此包的快速示例

use ChromeHeadless\ChromeHeadless;

$html = ChromeHeadless::url('https://example.com')->getHtml();

您也可以使用 getDOMCrawler() 方法来获取 DOM,它将返回一个 Symfony\Component\DomCrawler\Crawler 实例,而不是将 DOM 作为字符串获取。

use ChromeHeadless\ChromeHeadless;

$dom = ChromeHeadless::url('https://example.com')->getDOMCrawler();
    
$title = $dom->filter('title')->text();

这使得您可以轻松过滤 DOM 中的特定元素。请参阅完整的文档此处

测试

您可以通过以下命令运行测试

composer test