Puppeteer Sharp: установка фальшивого пути при загрузке контента?

Я использую page.SetContentAsync(myHtml);метод в Puppeteer Sharp для загрузки некоторого HTML, который не размещен ни на одном сервере.

К сожалению, в моем HTML мне нужно использовать скрипт JS (который я не могу легко изменить), который опирается на location.pathname значение, содержащее хотя бы одну косую черту / (он делает некоторые разборы на нем), иначе он падает.

Есть ли способ, либо через сам Puppeteer или простой JavaScript, переопределить / подделать значение location.pathname?

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();
})();
Другие вопросы по тегам