gpt4 book ai didi

javascript - Puppeteer:从单击输入标签按钮后不刷新的页面中抓取 html

转载 作者:行者123 更新时间:2023-12-01 01:16:15 26 4
gpt4 key购买 nike

我试图在单击输入标签按钮后获取一些 html。我正在使用 page.evaluate() 单击按钮,因为 page.click() 似乎不适用于输入标签按钮。我在 puppeteer 启动选项中尝试使用 headless:false 进行可视化调试,以验证浏览器确实导航到单击按钮后的位置。我不确定为什么 page.content() 返回单击按钮之前的 html,而不是事件发生后的 html。

const puppeteer = require('puppeteer');
const url = 'http://www.yvr.ca/en/passengers/flights/departing-flights';
const fs = require('fs');
const tomorrowSelector = '#flights-toggle-tomorrow'

puppeteer.launch().then(async browser => {
const page = await browser.newPage();
await page.goto(url);
await page.evaluate((selector)=>document.querySelector(selector).click(),tomorrowSelector);
let html = await page.content();

await fs.writeFile('index.html', html, function(err){
if (err) console.log(err);
console.log("Successfully Written to File.");
});
await browser.close();
});

最佳答案

您可以单击 radio 的标签。此外,您需要等待状态更改的一些迹象(对于 XHR/获取响应或新选择器)。例如,此代码适用于我,但您可以使用任何其他条件或只需等待几秒钟。

const fs = require('fs');
const puppeteer = require('puppeteer');

const url = 'http://www.yvr.ca/en/passengers/flights/departing-flights';

const tomorrowLabelSelector = 'label[for=flights-toggle-tomorrow]';
const tomorrowLabelSelectorChecked = '.yvr-form__toggle:checked + label[for=flights-toggle-tomorrow]';

puppeteer.launch({ headless: false }).then(async (browser) => {
const page = await browser.newPage();
await page.goto(url);
await Promise.all([
page.click(tomorrowLabelSelector),
page.waitForSelector(tomorrowLabelSelectorChecked),
]);

const html = await page.content();

await fs.writeFile('index.html', html, (err) => {
if (err) console.log(err);
console.log('Successfully Written to File.');
});
// await browser.close();
});

关于javascript - Puppeteer:从单击输入标签按钮后不刷新的页面中抓取 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com