可以通过php

时间:2018-02-28 15:44:32

标签: puppeteer

我正在开发一个应用程序,使用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/');

1 个答案:

答案 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;