javascript - Puppeteer:在waitForNavigation 后page.evaluate 不起作用,调试在page.evaluate 内部不起作用

标签 javascript node.js puppeteer document

我可以使用 puppeteer 导航到一个页面但后来page.evaluate没有返回任何响应。此外,我无法在 page.evaluate 内部进行调试。任何一个。我在 Debug模式下运行脚本( node debug filename.js ),使用 sb(15)要在第 15 行设置断点,请按 c要继续,请等待页面加载,然后输入“repl”。现在,当我尝试调试时,它说 document is not defined .我该如何解决这两个问题?

const puppeteer = require('puppeteer');

(async function scrape() {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
  page.setDefaultNavigationTimeout(90000);
  const url = "https://excise.wb.gov.in/CHMS/Public/Page/CHMS_Public_Hospital_Bed_Availability.aspx";
  await page.goto(url, {waitUntil: 'networkidle2', timeout: 0});
  await page.waitForSelector('#ctl00_ContentPlaceHolder1_ddl_District');
  await page.select('#ctl00_ContentPlaceHolder1_ddl_District', '020');
  await page.waitForNavigation();
  let beds = await page.evaluate(() => {
    let dataRows = document.body.querySelectorAll("tbody tr");
    console.log("Num entires == " + dataRows.length);
  });
  await browser.close();
})();

最佳答案

选择城市不会导致URL改变,这就是 page.waitForNavigation() 等待。

This resolves when the page navigates to a new URL or reloads.


它永远不会发生,因此您的代码不会继续。
您可能正在寻找 page.waitForSelector() 反而:
  // ...
  await page.select('#ctl00_ContentPlaceHolder1_ddl_District', '020');
  await page.waitForSelector('tbody tr');
  let beds = await page.evaluate(() => {
    let dataRows = document.body.querySelectorAll('tbody tr');
    return [...dataRows].map(row => row.querySelector('h5').textContent);
  });
  console.log(beds);
  await browser.close();

关于javascript - Puppeteer:在waitForNavigation 后page.evaluate 不起作用,调试在page.evaluate 内部不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67562491/

相关文章:

javascript - Pikaday Datepicker 太多递归/堆栈溢出

javascript - Node.js 未定义 VS 空字符串内存使用

node.js - 如何让 puppeteer 操纵者不被发现?

javascript - 在 puppeteer 请求中使用不同的 ip 地址

javascript - 字符串正则表达式用户名或电子邮件挂起

javascript - 为什么“保存”按钮需要点击两次才能点击相关功能?

javascript - 为什么 submit() 方法没有触发 onsubmit 事件?

javascript - 如何从父对象返回子对象数组

javascript - 尽管映射正确,Node/Express Rest API 仍不断输入相同的 Controller 功能

c# - Puppeteer 中 LaunchAsync() 的线程安全