在Node.js网络应用上使用Puppeteer可以进行网络抓取吗?

时间:2019-09-26 18:01:18

标签: javascript node.js puppeteer

我注意到您不能只在脚本中启动puppeteer,它要求您连接到现有的浏览器WSEndpoint。当用户单击网页上的“提交”按钮时,我正在尝试从网站上抓取数据。

我查看了发现的here帖子,但不能完全将其与任何解决方案一起使用。我知道您可以打开调试器浏览器并为此连接到端点,但是链接每次都会更改,这并不是很方便,特别是如果其他人使用它的话。

到目前为止,我的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);

据我所知,每次您重新打开浏览器时,浏览器WSEndpoint都会更改,这是不理想的,因为除非您每次都更改源代码,否则Web应用程序将无法工作。另外,我什至不知道如何找到/ devtools / browser链接。我从搜索中发现的所有内容都是键入chrome.exe,然后一些标志导航到localhost:5200或类似的名称。但是,我只能在该页面上看到/ devtools / pages /..。虽然这不是我一直在寻找的解决方案。

是否可以在动态创建的某个Web套接字上启动人偶实例,然后在需要时将脚本连接到该人偶实例?我是Web套接字的新手,所以上面链接中的解决方案之一可能就是我想要的,但我不太了解我所缺少的内容。

0 个答案:

没有答案