gpt4 book ai didi

javascript - 在 Puppeteer 中访问 javascript 变量

转载 作者:行者123 更新时间:2023-12-05 00:35:30 25 4
gpt4 key购买 nike

我正在尝试使用 puppeteer 呈现页面,提取页面上动态 javascript 变量的名称,并将变量作为对象返回。我正在使用 puppeteer 和 node.js 来执行此操作。
我能够获取页面上正在生成的 javascript 变量的名称,但每当我尝试将其打印到控制台时,我都会收到“ undefined ”错误。我花了早上的大部分时间试图弄清楚这一点,但我很难过。这是下面的代码。

const puppeteer= require('puppeteer');

var url = 'https://www.website.com';
async function run () {

try {
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox']
});
const page = await browser.newPage();
await page.goto(url);

const flashVariableName = await page.evaluate( () => {
var start = document.documentElement.innerHTML.indexOf('var flashvariable_') + 'var '.length;
var tempDoc = document.documentElement.innerHTML.substr(start);
var end = tempDoc.indexOf(' =');
return tempDoc.substr(0, end);
});

console.log(await page.evaluate( (flashVariableName) => flashVariableName ));

await browser.close();
} catch(e){
console.log("Error Occurred", e)
}
}

run();
Console Output
flashVariableName 正在为页面上的 javascript 变量返回正确的名称,但我如何才能真正访问该变量?

最佳答案

你有两个问题。
这是第一个:

console.log(await page.evaluate( (flashVariableName) => flashVariableName ));
// ^^^^^^^^^^^^^^^^^
// |
// +--> this is undefined
如果您查看 Page#evaluate 的文档
enter image description here
你缺少的是 ...argspageFunction 提供参数的位.它应该是这样的:
console.log(await page.evaluate( (flashVariableName) => flashVariableName, flashVariableName ));
// ^^^^^^^^^^^^^^^^^
但这还不够,因为 flashVariableName此时只是一个字符串。它是变量的名称,而不是变量本身。您仍然需要“评估”它:
console.log(await page.evaluate( (varName) => window[varName], flashVariableName ));
但是,仅当您尝试读取的变量在全局范围内可用时才有效(即 window 在您的情况下) 它可以被序列化(例如,如果它引用了一个不可能的函数或 DOM 元素)

关于javascript - 在 Puppeteer 中访问 javascript 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65741375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com