helloiamlukas / laravel-chrome
Laravel 的 Chrome Headless 封装。获取任何网页的 DOM。
Requires
- php: ^7.1
- helloiamlukas/chrome-php: ^2.0
Requires (Dev)
- orchestra/testbench: ^3.6
- phpunit/phpunit: ^6.1|^7.0
This package is auto-updated.
Last update: 2021-09-16 19:48:49 UTC
README
使用无头 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