首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >木偶- iFrame内的链接

木偶- iFrame内的链接
EN

Stack Overflow用户
提问于 2019-02-25 00:56:07
回答 2查看 3.7K关注 0票数 2

我必须将广告链接放在此页的要点下面。

我正在尝试木偶,但我有麻烦,因为广告是一个iframe!

我可以使用Chrome控制台成功地获得我所需要的:

代码语言:javascript
复制
document.querySelector('#adContainer a').href

Puppetter

代码语言:javascript
复制
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“

编辑:

代码语言:javascript
复制
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();

Runhttps://try-puppeteer.appspot.com/

EN

回答 2

Stack Overflow用户

发布于 2019-02-25 01:11:56

您需要在框架内部执行该查询,该查询可以通过page.frames()访问。

代码语言:javascript
复制
const adFrame = page.frames().find(frame => frame.name().includes('<some text only appearing in name of this iFrame>');
const urlSelector = '#sp_hqp_shared_inner > div > a';
const url = await adFrame.$eval(urlSelector, element => element.textContent);
console.log(url);

我是怎么得到那个网址的选择器的:

Discaimer我自己也没试过。另外,我认为在iFrame中获取url的适当方法是类似于

代码语言:javascript
复制
const url = await adFrame.evaluate((sel) => {
  return document.querySelectorAll(sel)[0].href;
}, urlSelector);
票数 4
EN

Stack Overflow用户

发布于 2019-05-07 07:44:59

每次加载页面时,您都必须切换到要处理的框架。

代码语言:javascript
复制
async getRequiredLink() {
    return await this.page.evaluate(() => {
        let iframe = document.getElementById('frame_id'); //pass id of your frame
        let doc = iframe.contentDocument; // changing the context to the working frame
        let ele = doc.querySelector('you-selector'); // selecting the required element
        return ele.href;
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54858149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档