В Puppeteer page.evaluate
выдает ошибку, если я page.evaluate
класс в качестве аргумента.
Тем не менее, он работает для обычных объектов.
Есть ли способ обхода работы?
const puppeteer = require("puppeteer");
(async () => {
let browser = await puppeteer.launch({
headless: true
});
let page = await browser.newPage();
class SomeClass {
constructor() {
this.a = 3;
}
}
await page.evaluate((SomeClass) => {
let object = new SomeClass();
console.log(object.a);
}, SomeClass);
})();
Аналогичная проблема возникает, если вы попытаетесь передать функцию. Я видел, как люди строят функцию, чтобы передать ее кукловоду, чтобы она работала, поэтому в вашем случае я сделаю это, используя eval. Многие люди считают, что eval - это зло, возможно, есть лучший способ, но, по крайней мере, это возможное обходное решение.
class SomeClass {
constructor() {
this.a = 3;
}
}
await page.evaluate((strSomeClass) => {
eval("window.SomeClass = " + strSomeClass);
let object = new SomeClass();
console.log(object.a);
}, SomeClass.toString());
Вы можете избежать использования eval()
, передав экземпляр объекта, а не самого объекта, на page.evaluate()
:
await page.evaluate( object =>
{
console.log( object.a );
}, new SomeClass );
Ваша полная программа должна выглядеть примерно так:
'use strict';
const puppeteer = require( 'puppeteer' );
( async () =>
{
const browser = await puppeteer.launch (
{
'headless' : true
});
const page = await browser.newPage();
class SomeClass
{
constructor ()
{
this.a = 3;
}
}
await page.evaluate( object =>
{
console.log( object.a );
}, new SomeClass );
await browser.close();
})();