我正在使用Puppeteer进行网页抓取,但遇到了麻烦。我要抓取的网站是这个one,我正在尝试创建日历的屏幕截图,该屏幕截图在点击“立即预订”>“日期”按钮后显示。
const puppeteer = require('puppeteer');
const fs = require('fs');
void (async () => {
try {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('https://www.marriott.com/hotels/travel/reumd-le-meridien-ra-beach-hotel-and-spa');
await page.setViewport({ width: 1920, height: 938 });
await page.waitForSelector('.m-hotel-info > .l-container > .l-header-section > .l-m-col-2 > .m-button');
await page.click('.m-hotel-info > .l-container > .l-header-section > .l-m-col-2 > .m-button');
await page.waitForSelector('.modal-content');
await page.waitFor(5000);
await page.waitForSelector('.js-recent-search-inputs .js-datepick-container .l-h-field-input')
await page.click('.js-recent-search-inputs .js-datepick-container .l-h-field-input');
await page.waitFor(5000);
await page.screenshot({ path: 'myscreenshot.png'});
await browser.close();
} catch (error) {
console.log(error);
}
})()
这是myscreenshot.png应该包含的内容:
但是我却得到了这个:
如您所见,myscreenshot.png不包含日历。我不知道自己在做什么错,因为我单击了正确的节点,甚至还给了我足够的时间来加载所有内容。
提前谢谢!
编辑:我忘了说我也曾尝试Puppeteer recorder来实现这一目标,但我也没有运气。
答案 0 :(得分:0)
由于您有许多.l-h-field-input
元素,因此我会尝试在其中更具体。
这对我有用:
await page.click('.js-recent-search-inputs .js-datepick-container .l-h-field-input');