我正在开发一个应用程序,使用puppeteer来收集某些含有chrome-headdless的内容。而且我想知道是否可以将chromiun的实例永久解除并将作品传递给他以收集内容。也就是说,不要为每个任务执行启动,而是在开始时执行,例如:
var puppeteer = require('puppeteer');
class Instancia
{
constructor()
{
const width = 1920;
const height = 1080;
const useragent = 'Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0';
this.browser = null;
this.page = null;
this.init = async function()
{
this.browser = await puppeteer.launch({
args: ['--no-sandbox', `--window-size=${ width },${ height }`],
headless: false,
executablePath: '/usr/bin/chromium',
devtools: false,
slowMo: 20
});
this.page = await this.browser.newPage();
await this.page.setUserAgent(useragent);
await this.page.setViewport({
width,
height
});
}
this.goTo = async function(url)
{
console.log(url);
console.log(this.page);
await this.page.goto(url);
}
}
}
var browserObj = new Instancia();
browserObj.init();
browserObj.goTo('https://www.example.com/');
答案 0 :(得分:0)
在所有可以找到的例子中,一个启动木偶操纵者然后执行各种操作。这会导致浏览器被取消,执行操作,然后关闭浏览器。如果必须收集有关100个URL的信息,这意味着将打开100个chrome实例。如果这种情况在短时间内发生,则会严重影响服务器性能。
我的问题是,是否可以永久运行Chrome并为队列中的每个网址打开标签,执行操作并关闭标签而不是浏览器本身。
在您致电browserObj. goTo (' https://www.example.com/');
时建议的示例代码中,您会看到以下消息:
(node:9355) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'goto' of null.
然后您无法从实例访问页面对象。
我想知道的是,是否可以在一侧打开浏览器实例,例如从php文件运行如下:
shell_exec('node myFile. js url css_selectors');
运行myFile。 js包含一些指令,如:
page.goto(url);
const pageContent = await page.content();
return pageContent;