Puppeteer Sharp:加载内容时设置假路径?
Puppeteer Sharp: setting a fake path when loading content?
我正在使用
page.SetContentAsync(myHtml);
Puppeteer Sharp 中的方法加载一些未托管在任何服务器上的 HTML。
不幸的是,在我的 HTML 中,我需要使用一个 JS 脚本(我无法轻易修改),它依赖于 location.pathname
值至少包含一个斜线 /
(它对其进行了一些解析),否则它会崩溃。
有没有办法,通过 Puppeteer 本身或简单的 JavaScript,到 override/fake location.pathname
的值?
您可以使用 --disable-web-security
and then use 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();
})();
我正在使用
page.SetContentAsync(myHtml);
Puppeteer Sharp 中的方法加载一些未托管在任何服务器上的 HTML。
不幸的是,在我的 HTML 中,我需要使用一个 JS 脚本(我无法轻易修改),它依赖于 location.pathname
值至少包含一个斜线 /
(它对其进行了一些解析),否则它会崩溃。
有没有办法,通过 Puppeteer 本身或简单的 JavaScript,到 override/fake location.pathname
的值?
您可以使用 --disable-web-security
and then use 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();
})();