免责声明:本文不会教您如何在客户端上运行puppeteer(chromium),它只会向您展示如何连接到运行在其他地方的puppeteer实例。
目前在puppeteer版本1.9.0
上是完全可行的(需要一些麻烦)。
下面我列出了puppeteer web、客户端pdf和图像生成以及外部API。
1. Puppeteer Web
看起来您正在尝试将puppeteer捆绑到Web应用程序中。Tip-of-tree Puppeteer更易于捆绑,并在其package.json中包含浏览器字段,这应该有助于捆绑。
您必须了解一个事实,即前端除了REST / WS API之外,没有任何其他方式可以访问后端。因此,您要么使用这些API,要么自己构建一些API。您可以构建一个简单的express API并从vue应用程序中使用它。有很多资源和stackoverflow问题可以帮助您完成。
在这个笔记中,我们将使用闪亮的puppeteer-web捆绑。 :)
运行Chrome并获取browserWSEndpoint
你需要在某个地方运行
chrome
才能拥有这个。可能是在你托管Vue应用程序的服务器上。假设它是
chromium
,你可以使用以下代码。
chromium
--disable-background-networking \
--disable-background-timer-throttling \
--disable-breakpad \
--disable-client-side-phishing-detection \
--disable-default-apps \
--disable-dev-shm-usage \
--disable-extensions \
--disable-features=site-per-process \
--disable-hang-monitor \
--disable-popup-blocking \
--disable-prompt-on-repost \
--disable-sync \
--disable-translate \
--metrics-recording-only \
--no-first-run \
--safebrowsing-disable-auto-update \
--enable-automation \
--password-store=basic \
--use-mock-keychain \
--remote-debugging-port=0
这将导致类似以下内容的结果,DevTools监听ws://127.0.0.1:57683/devtools/browser/foo
制作puppeteer浏览器版本
克隆puppeteer仓库,安装所有模块并运行命令以获取您可以嵌入UI的特定Web版本。
git clone https://github.com/GoogleChrome/puppeteer
npm install
npm run bundle
你会看到一个
utils/browser/puppeteer-web.js
文件。这是你需要在vue或web应用程序中嵌入的内容。
要求puppeteer浏览器并连接到端点
<script type="text/javascript" src="puppeteer-web.js"></script>
<script type="text/javascript">
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.connect({
browserWSEndpoint: theirBrowserWSEndpoint
});
const page = await browser.newPage();
.. a whole bunch of operations to perform to data scraping, etc.
})()
</script>
PS:我很快会撰写一篇详细的文章或答案,并提供各种截图,请保持关注。
2. 捕获当前页面的屏幕截图和pdf
您可以使用html2canvas来收集当前页面的屏幕截图。只需调用并使用它即可。vue-resume使用此功能生成最终图像。如果您想捕获当前页面或其中的任何部分,这将非常有用。
示例用法:
var element = document.getElementById('capture');
html2canvas(element).then(canvas => {
document.body.appendChild(canvas)
});
生成PDF文件也是一样的。你可以使用html2pdf来完成。
var element = document.getElementById('capture');
html2pdf(element); // prompts the user to save the result
3. 屏幕截图生成API
如果您仍需要生成屏幕截图,可以使用现有的服务。以下是其中一些(注意,该列表可能在未来没有更新并且无法工作)。