Puppeteer Sharp:加载内容时设置伪路径?

时间:2018-08-16 17:32:08

标签: javascript puppeteer puppeteer-sharp

我正在使用 page.SetContentAsync(myHtml); Puppeteer Sharp中的方法来加载一些未在任何服务器上托管的HTML。

不幸的是,在我的HTML中,我需要使用一个JS脚本(无法轻易修改),该脚本依赖于location.pathname值包含至少一个斜杠/(它会对),否则它将崩溃。

是否可以通过Puppeteer本身或简单的JavaScript覆盖/伪造location.pathname的值?

1 个答案:

答案 0 :(得分:1)

您可以使用--disable-web-security禁用同源策略,然后使用history.replaceState()替换浏览器历史记录中的当前条目。

这将更改location.pathname的值,而不会导致页面重定向。

考虑以下示例:

'use strict';

const puppeteer = require( 'puppeteer' );

( async () =>
{
    const browser = await puppeteer.launch({
        'args' : [
            '--disable-web-security'
        ]
    });

    const page = await browser.newPage();

    let pathname = await page.evaluate( () =>
    {
        const fake_pathname = '/example/index.php';

        history.replaceState( null, null, 'http://_' + fake_pathname );

        return location.pathname;
    });

    console.log( pathname ); // /example/index.php

    await page.setContent( /* ... */ );

    // Perform your task ...

    await browser.close();
})();