кукольник ждёт простоя сети после клика - PullRequest
1 голос
/ 21 января 2020

Ни у одного из существующих вопросов и ответов нет четкого решения этого вопроса, например,

Итак, вот простой рабочий пример, который люди могут увидеть / попробовать / исправить:

const puppeteer = require('puppeteer');

(async() => {
  const browser = await puppeteer.launch({headless: true});
  try {
    const page = await browser.newPage();

    await page.setViewport({width: 800,height: 800});
    const response = await page.goto(`https://stock.finance.sina.com.cn/usstock/quotes/TSLA.html`, {
        waitUntil: 'networkidle0'
      });
    //console.log(await page.content());

    let selector = `div.kke_menus_tab_edage > div:nth-child(6) > a`
    await page.waitForSelector(selector)
    await page.click(selector)

    const inputElement = await page.$('div.sec.clearfix div.block.block_hq')
    await inputElement.screenshot({path: 'sina-finance.png'})

  } catch (err) {console.log(err.message);}
  finally {
    await browser.close();
  }
})()

Итак, в итоге,

  • click не вызывает никакой навигации
  • inputElement уже существует, даже до нажатия, поэтому не может ждать на что.

Любое простое решение, такое как page.waitForNavigation, например, page.waitForNetwork({waitUntil: 'networkidle0'})?
Иначе, я сообщу об ошибке в проекте кукловода, чтобы предоставить его. Спасибо.

1 Ответ

1 голос
/ 21 января 2020

Если вы знаете, что конкретный запрос c делается при нажатии кнопки, вы можете легко использовать метод page.waitForResponse().

например

const pageClick = page.click(selector);
const response = page.waitForResponse(response => response.url() === 'https://example.com' && response.status() === 200);

await Promise.all([
    pageClick,
    response
]);
...