iframe - 如何使用 headless chrome 获取带有 puppeteer 的 Iframe 的内部 Html?

标签 iframe automation puppeteer google-chrome-headless

我正在尝试访问 iframe 的 .contentWindow.document(特别是通过 google 在页面上转换的广告)。

如果您通过 chrome 在控制台中执行此操作,它会按预期返回。例如,

var t = document.getElementById('google_ads_iframe_175840252/90-min/Homepage/Index/Top_0').contentWindow.document;

window.onload=t

当使用 headless chrome 通过 puppeteer 执行相同操作时,会返回一个带有 iframe 属性的时髦 Json。例如:

{ title:
   { location:
      { replace: {},
        assign: {},
        href: 'https://tpc.googlesyndication.com/safeframe/1-0-27/html/container.html',
        ancestorOrigins: [Object],
        origin: 'https://tpc.googlesyndication.com',
        protocol: 'https:',
        host: 'tpc.googlesyndication.com',
        hostname: 'tpc.googlesyndication.com',
        port: '',
        pathname: '/safeframe/1-0-27/html/container.html',
        search: '',
        hash: '',
        reload: {},
        toString: {} },
     closure_lm_292767: null,
     '4CGeArbVQ': 100 } }

我是 puppeteer 操纵的新手,任何建议都有帮助,我将在下面包含我的 puppeteer 操纵代码。

const puppeteer = require('puppeteer');
let scrape = async () => {
    const browser = await puppeteer.launch({
    args: [
      '--start-maximized','--disable-web-security',
          ],
        headless: false,
        //slowMo: 600,
        userDataDir: 'test-profile-dir',

        });

    const page = await browser.newPage();


try {
    await page.setViewport({width: 1920, height: 1080});
    await page.setUserAgent('Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36');
    await page.goto('https://www.90min.com/');
    await page.waitFor(2000);
} catch(error) {
    console.error(error);
}



try {
    const result = await page.evaluate(() => {
    let title = document.getElementById('google_ads_iframe_175840252/90-min/Homepage/Index/Top_0').contentWindow.document;
    window.onload= title;
    return {
     title
           }
    });


    browser.close();
    return result;
} catch(error) {
    console.error(error);
}
};

    scrape().then((value) => {
    console.log(value); // Success!
    });

最佳答案

找到答案,使用.contentWindow.document.childNodes["0"].innerHTML;在 puppeteer 中将带回多汁的 iframe 内容。

关于iframe - 如何使用 headless chrome 获取带有 puppeteer 的 Iframe 的内部 Html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50493082/

相关文章:

html - Orbeon Form Runner iFrame 问题

php - JavaScript 或 PHP 中的宏?

iphone - 无法使用 Fonemonkey 运行测试

google-chrome - 如何使用 Chrome Incognito 运行 Cypress 主导测试

javascript - Puppeteer 转到不同的页面

javascript - ubuntu 中未获取 puppeteer 脚本的内容

javascript - 在 puppeteer 中使用 xpath 选择下拉列表

javascript - iframe 手机问题

.net - 有没有办法以编程方式连接 Excel 文件?

jquery - Jssor、iFrame、内联 CSS 和 Firefox