我可以使用 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/