我尝试启动一个浏览器并根据需要使用它,但我不知道如何将其设置为变量。
// return promise
puppeteer.launch()
这个:
// It's not working
let bro;
puppeteer.launch()
.then(res => bro = res);
这个:
//It's not working too
let bro;
puppeteer.launch()
.then(res => bro = res);
while (bro === undefined) {
}
bro.newPage();
请告诉我如何启动浏览器并根据需要使用它:
//
let bro
// launch browser
bro.newPage()
...
例如在react中我可以调用异步函数
axios.post("/postOnePage", data)
.then(res => {
this.setState({onePageCount: res.data.wordCount});
})
.catch(err => console.log(err))
将结果设置为变量并根据需要使用
答案 0 :(得分:4)
如果您使用 InheritableThreadLocal
:
async/await
注意:将其包装在 const browser = await puppeteer.launch();
const page = await browser.newPage();
功能 中。
基本上async
返回一个解析为浏览器实例的promise。因此,您只需初始化变量,就可以获得浏览器。使用 puppeteer.launch()
,我认为这将是一个混乱,您必须在 then
块中工作。
then
您也可以参考Puppeteer API 。文档非常好用例子。希望它能有所帮助。
编辑1:
示例工作示例:
const browser = puppeteer.launch();
browser.then((brw) => {
const page = brw.newPage();
page.then(pg => {
pg.goto('https://example.com').then(() => {
pg.screenshot({
path: 'example.png'
}).then(() => {
brw.close();
});
});
});
});
希望它有所帮助。
答案 1 :(得分:1)
我尝试了你的代码的第一个版本,即
let bro;
puppeteer.launch()
.then(res => bro = res);
并且只有在使用关键字await
之后才能使用
let bro;
await puppeteer.launch()
.then(res => bro = res);
以下是我的代码运行方式
async function run(){
let bro;
await puppeteer.launch()
.then(res => bro = res);
const page = await bro.newPage();
await page.goto('https://github.com/login');
await bro.close();
}
run();
相同代码的另一个版本
let bro;
await puppeteer.launch()
.then(async browser => {
bro = browser;
});
让我知道这是否有效。
版本2 由于节点环境是异步的,因此您必须使用alter来调用函数和传递变量。这是在run()之外可以使用浏览器varable的新代码。
var bro;
async function run(){
await puppeteer.launch()
.then(res => bro = res);
const page = await bro.newPage();
await page.goto('https://github.com/login');
}
//another function
async function another(){
console.log('2')
const page = await bro.newPage();
await page.goto('https://github.com');
await bro.close();
}
run().then(() => another());
注意强> 在
中使用的最后一个函数中使用bro.close()
关闭浏览器
答案 2 :(得分:0)
请在箭头功能
中尝试{}
// Try
let bro;
puppeteer.launch()
.then(res => {bro = res});
或
// Try
const handleRes = (res) => {
// do something with res here
}
puppeteer.launch()
.then(handleRes);