Я уже попробовал все, что упомянуто в Ошибка: ошибка оценки: ReferenceError: util не определен и Как передать требуемый объект модуля на страницу кукловода. Оценить .В частности, я попытался преобразовать url.js с помощью browserify (я также попытался преобразовать вместе url.js и punycode.js) и добавил соответствующий сценарий (bundle.js) в среду страницы.
Я пытаюсь использовать модуль url внутри page.evaluate () в кукловоде.Вот очень простой пример, показывающий ошибку:
const puppeteer = require('puppeteer');
puppeteer.launch({dumpio: true}).then(async browser => {
const page = await browser.newPage();
const response = await page.goto('https://www.google.com');
await page.waitFor(5000);
const pageUrl = page.url();
await page.addScriptTag({path: 'bundle.js'});
await page.evaluate(pageUrl => {
const anchors = Array.from(document.querySelectorAll('a'));
for (let anchor of anchors) {
const href = anchor.getAttribute('href');
let hrefUrl;
try {
hrefUrl = new URL(href);
} catch (e) {
hrefUrl = new URL(href, pageUrl);
}
console.log(url.format(hrefUrl, {fragment: false}));
}
}, pageUrl);
await page.close();
await browser.close();
});
В этом примере генерируется следующая ошибка:
(узел: 23667) UnhandledPromiseRejectionWarning: Ошибка: Ошибка оценки: ReferenceError: urlне определен в pageUrl ( puppeteer_evaluation_script : 11: 19) в ExecutionContext.evaluateHandle (/home/webb/node_modules/puppeteer/lib/ExecutionContext.js:97:13) в process._tickCallback (внутренний /process / next_tick.js: 188: 7)
Что еще нужно сделать, чтобы распознать модуль url?