javascript - 在 Node.js 网络应用程序上使用 Puppeteer 来进行网络抓取?
问题描述
我注意到您不能只在脚本中启动 puppeteer,它需要您连接到现有的 browserWSEndpoint。当用户单击网页上的提交按钮时,我试图从网站上抓取数据。
我查看了此处找到的帖子,但无法完全使其与任何解决方案一起使用。我知道你可以打开一个调试器浏览器并连接到它的端点,但是链接每次都会改变,这不是很方便,特别是如果它被其他人使用。
到目前为止,我的 node.js 服务器类中有这个:
var express = require('express');
var app = express();
app.use('/public', express.static('public'));
app.use('/node_modules', express.static('node_modules'));
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html')
});
app.listen(3000);
我尝试按照链接中的建议创建代理服务器,但没有运气。我试图运行 puppeteer 的脚本如下所示:
const puppeteer = require('puppeteer');
async function getTitle() {
const browser = await puppeteer.connect({
browserWSEndpoint: 'ws://127.0.0.1:9222/devtools/browser/9f0a2240-2cb7-4efa-ac3c-8ef883d36d12',
});
const page = await browser.newPage();
await page.goto('http://example.com');
const title = await page.title();
await page.close();
await browser.disconnect();
return title;
}
getTitle().then(console.log);
据我所知,每次重新打开浏览器时 browserWSEndpoint 都会发生变化,这并不理想,因为除非您每次都更改源代码,否则 Web 应用程序将无法工作。另外,我什至不确定您如何找到 /devtools/browser 链接。我从搜索中找到的只是输入 chrome.exe 和一些标志,然后导航到 localhost:5200 或类似的东西。但是,我只在该页面上看到 /devtools/pages/.. 。虽然这不是我一直在寻找的解决方案。
有没有办法在动态创建的某个 web 套接字上启动 puppeteer 实例,然后在需要时让脚本连接到 puppeteer 实例?我对网络套接字很陌生,所以也许我上面链接中的解决方案之一就是我正在寻找的,但我不太明白我错过了什么。
解决方案
推荐阅读
- docker - Docker,复制到卷的数据库大小为 0kb
- python - Angular CLI + Flask 应用程序使用 ng serve 运行和显示,但不通过 Flask 显示
- javascript - 如何修复 HTTP 状态 500 - Servlet.init() 用于 servlet jersey 抛出异常?
- c# - 无法使用 Xunit 在异步方法中断言异常
- python - 使用 fastai 确定图像分割神经网络中的输入神经元数量?
- c# - 在只读对象属性上编辑 DataGridViewCell
- javascript - 反应(表情符号)收集并获得确切的数字
- python - 为什么这个网站的请求模块随机失败
- python - Pollard 的 p-1 算法的第二阶段
- javascript - 多次执行“clearInterval”时计时器不停止