Puppeteer page.click не работает в режиме без головы - PullRequest
0 голосов
/ 28 марта 2020

В чем проблема

Я пытаюсь щелкнуть по некоторому элементу с помощью Puppeteer, и я попытался page.click и page.evaluate в этом задании.

  • Если в headless=false В режиме оба подхода работают хорошо.
  • Если в режиме headless=true, page.evaluate работает, но page.click зависает навсегда .

Что я сделал тогда page.waitForSelector явно для элемента до page.click, см. код ниже.

И, похоже, waitForSelector тоже навсегда зависает.

Может ли кто-нибудь помочь мне понять, почему он зависает в режиме без головы?

Env

chrome version is HeadlessChrome/80.0.3987.0
puppeteer version 2.1
macOS catalina 10.15.3

Код


const pptr = require('puppeteer');

console.log(pptr.version);

(async () => {
    var br = await pptr.launch({
        headless: true,
        defaultViewport: null,
        args: [
            '--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
            '--user-data-dir=/tmp/user_data/',
        ],
    });
    var page = await br.newPage();
    var url = 'https://www.lookfantastic.com/brands/aesop/view-all.list';
    var css = 'div.responsiveProductListPage_topPagination button[aria-label="next page" i]:not([disabled])';

    const chrome_version = await page.browser().version();
    console.log(`chrome version is ${chrome_version}`);

    await page.goto(url);
    await page.waitForSelector(css, { visible: true });  // when headless=true, hangs here.

    await Promise.all([
        page.click(css),
        //page.evaluate((css) => { document.querySelector(css).click(); }, css),
        page.waitForNavigation({waitUntil: 'networkidle0'}),
    ]);
    console.log('success');
    await new Promise(r => setTimeout(r, 1000));
    await br.close();
})();

1 Ответ

1 голос
/ 28 марта 2020

Исходя из вашего комментария, экран без заголовка может иметь неправильный размер для тестируемого элемента. Этот элемент должен отображаться на экране размером с ноутбук (ширина> 1200 пикселей в вашем случае)?

Вы можете установить размер окна Puppeteer с помощью опции --window-size=width,height, например:

args: [
            '--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
            '--user-data-dir=/tmp/user_data/',
            '--window-size=1200,800',
        ],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...