gpt4 book ai didi

node.js - 如何将动态页面自动化命令从外部文件传递给 puppeteer?

转载 作者:太空宇宙 更新时间:2023-11-04 00:15:34 26 4
gpt4 key购买 nike

我正在尝试从外部文件将动态页面自动化命令传递给 puppeteer。我是 puppeteer 和 node 的新手,所以我提前道歉。

// app.js
// ========

app.get('/test', (req, res) =>
(async () => {

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://testurl.com');

var events = require('./events.json');

for(var i=0;i<events.length;i++){
var tmp = events[i];
await page.evaluate((tmp) => { return Promise.resolve(tmp.event); }, tmp);
}

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

我的事件 json 文件如下所示:

// events.json
// ========

[
{
"event":"page.waitFor(4000)"
},
{
"event":"page.click('#aLogin')"
},
{
"event":"page.waitFor(1000)"
}
]

我尝试了上述方法的几种变体,以及导入将页面对象传递给模块函数之一的模块,但没有任何效果。谁能告诉我这是否可能,如果可以,如何更好地实现这一目标?

最佳答案

解决方案实际上非常简单明了。您只需要了解它是如何工作的。

首先,您不能传递这样的 page 元素进行评估。相反,您可以执行以下操作,

在单独的文件中,

module.exports = async function getCommands(page) {
return Promise.all([
await page.waitFor(4000),
await page.click("#aLogin"),
await page.waitFor(1000)
]);
};

现在在你的主文件上,

await require('./events.js').getCommands(page);

好了,完成了!它会按照您的意愿一一执行所有命令。

这是经过一些调整的完整代码,

const puppeteer = require("puppeteer");


async function getCommands(page) {
return Promise.all([
await page.title(),
await page.waitFor(1000)
]);
};

(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("https://example.com");

let data = await getCommands(page);
console.log(data);

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

关于node.js - 如何将动态页面自动化命令从外部文件传递给 puppeteer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47257451/

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