【发布时间】:2019-02-25 00:56:07
【问题描述】:
我必须得到this page的要点下方的广告链接。
我正在尝试使用 Puppeter,但我遇到了问题,因为广告是 iframe!
我可以使用 Chrome 控制台成功获取我需要的内容:
document.querySelector('#adContainer a').href
木偶
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.setViewport({width: 1440, height: 1000})
await page.goto('https://www.amazon.co.uk/dp/B07DDDB34D', {waitUntil: 'networkidle2'})
await page.waitFor(2500);
const elementHandle = await page.$eval('#adContainer a', el => el.href);
console.log(elementHandle);
await page.screenshot({path: 'example.png', fullPage: false});
await browser.close();
})();
错误:错误:未能找到匹配选择器“#adContainer a”的元素
编辑:
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.setViewport({width: 1440, height: 1000})
await page.goto('https://www.amazon.co.uk/dp/B07DDDB34D', {waitUntil: 'networkidle2'})
const adFrame = page.frames().find(frame => frame.name().includes('"adServer":"cs'))
const urlSelector = '#sp_hqp_shared_inner > div > a';
const url = await adFrame.$eval(urlSelector, element => element.textContent);
console.log(url);
await browser.close();
【问题讨论】:
-
在 chrome 控制台中工作的原因是您在检查时切换到 iframe 上下文。
标签: javascript web-scraping puppeteer