javascript - puppeteer 师夏普 : setting a fake path when loading content?

标签 javascript puppeteer puppeteer-sharp

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

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

有没有办法,通过 Puppeteer 本身或简单的 JavaScript,覆盖/伪造 location.pathname 的值?

最佳答案

您可以使用 --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();
})();

关于javascript - puppeteer 师夏普 : setting a fake path when loading content?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51882504/

相关文章:

javascript - Cheerio爬虫 : How do I ensure a page is fully loaded before extracting the data?

c# - 无法单击具有特定属性的按钮

c# - Web API Controller 返回任务并不总是等待任务完成(puppeteer-sharp)

php - 在不安装 Zend 优化器的情况下运行 php 文件

javascript - 使用 d3js 中的用户输入在下拉菜单上创建多个图表

javascript - 如何显示来自带有特殊字符的资源的消息?

c# - Puppeteer Sharp 奇怪的行为

javascript - 如何使用 lodash 或 javascript 过滤对象

node.js - 如何检测 puppeteer 中的警报

docker - 通过 no-sandbox 但仍然出现错误 'Running as root without --no-sandbox is not supported.`