milivojsa/laravel-chrome

Chrome无头版的Laravel包装器。获取任何网页的DOM。

v3.0.2 2019-04-18 21:20 UTC

README

Version Build Status StyleCI

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

💡 这是由 milivojsa/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 milivojsa/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\Laravel\ChromeHeadless;

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

除了将DOM作为字符串获取之外,您还可以使用getDOMCrawler()方法,这将返回一个Symfony\Component\DomCrawler\Crawler实例。

use ChromeHeadless\Laravel\ChromeHeadless;

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

这使得过滤DOM中的特定元素变得容易。请参阅完整的文档此处

测试

您可以通过以下方式运行测试

composer test