Возвратите объект окна, используя кукловода - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь вернуть весь объект Windows со страницы, а затем пересекаю объект за пределами кукловода.

Я пытаюсь получить доступ к данным в свойстве Highcharts, для которого мне нужен доступ к объекту окна. Обычный код JavaScript, похожий на window.Highcharts.charts[0].series[0].data.

Я подумал, что самый простой способ - использовать кукловода для доступа к сайту и просто отправить мне обратно объект Windows, который я затем смог бы использовать вне кукловода, как и любой другой объект JS.

После прочтения документации мне трудно вернуть объект, так как он выглядит просто помещая «окно» в консоль Chrome. Я не уверен, что мне не хватает?

Я прочитал документацию, и следующие два метода, похоже, должны работать?

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.example.com', {waitUntil: 'networkidle2'});

    // METHOD 1
    // Create a Map object
    await page.evaluate(() => window.map = new Map());
    // Get a handle to the Map object prototype
    const mapPrototype = await page.evaluateHandle(() => Map.prototype);
    // Query all map instances into an array
    const mapInstances = await page.queryObjects(mapPrototype);

    console.log(mapInstances);

    await mapInstances.dispose();
    await mapPrototype.dispose();

    // METHOD 2
    const handle = await page.evaluateHandle(() => ({window, document}));
    const properties = await handle.getProperties();
    const windowHandle = properties.get('window');
    const documentHandle = properties.get('document');
    var result = await page.evaluate(win => win, windowHandle);

    console.log(result)

    await handle.dispose();



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

Тем не менее, он возвращает только следующее в консоли, а не простой объект, который я хотел бы;

enter image description here

Не уверен, правильно ли я поступаю, поэтому любая помощь / совет очень важны.

1 Ответ

0 голосов
/ 27 июня 2018

Оценка кукловода должна вернуть сериализуемый объект (в противном случае он вернет неопределенное, как в вашем случае).

Вы можете попробовать следующий подход (который на самом деле использует прокси-сервер es6 Javascript, чтобы позволить вам использовать окно внутри теста вашего узла)

артикул:

https://medium.com/front-end-hacking/direct-javascript-access-in-puppeteer-391e48b5196b

Repo:

https://github.com/wix-playground/puppeteer-direct

...