【发布时间】:2021-04-19 02:45:25
【问题描述】:
我希望你能帮助我,我已经使用 node.js 很短的时间,只有一个星期的 puppeteer,我做了一个小的 excrip 来自动化任务,当运行脚本时它会正确地执行这个过程一目了然。
但是,控制台向我抛出了两种类型的错误:
1st - UnhandledPromiseRejectionWarning: TimeoutError: waiting for selector .flexMain> div> div> #PageContent_AuthorisedButtons> .btn failed: timeout 30000ms exceeded
在新的 WaitTask 中
2nd - UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch () 处理的承诺。
我很感激帮助解决问题,因为我被卡住了,看不到解决方案。
const puppeteer = require('puppeteer');
(async () => {
try {
const browser = await puppeteer.launch({
headless: false,
userDataDir: "./cache",
ignoreDefaultArgs: [
"--disable-extensions",
"--enable-automation"
],
args: [
"--no-sanbox",
"--disable-setuid-sandbox",
"--disable-dev-shm-usage",
"--disable-gpu"
]
})
const page = await browser.newPage();
page.setRequestInterception(true);
page.on("request", async req => {
if (req.url().endsWith(".png")) {
req.abort();
} else {
req.continue();
await page.waitForSelector('.flexMain > div > div > #PageContent_AuthorisedButtons > .btn');
await page.click('.flexMain > div > div > #PageContent_AuthorisedButtons > .btn');
}
});
page.on('error', e => console.log(e));
await page.goto('http://example.com');
await page.setViewport({ width: 1920, height: 926 });
await page.waitForSelector('.flexMain > div > div > #PageContent_UnauthorisedButtons > .btn');
await page.click('.flexMain > div > div > #PageContent_UnauthorisedButtons > .btn');
await page.type('.row #SignInEmailInput', 'example@gmail.com');
await page.waitForSelector('.col-md-7 > #SignInForm > .form-group > div:nth-child(2) > a');
await page.click('.col-md-7 > #SignInForm > .form-group > div:nth-child(2) > a');
const collectCaptcha = await page.$('#adcopy-puzzle-image-image');
collectCaptcha.screenshot({ path: 'src/img/capture-captcha.png' });
const urlImageCaptcha = path.join(__dirname, 'img/capture-captcha1.png');
// page.waitForTimeout(10000)
// await browser.close()
}
catch (e) {
}
})()
【问题讨论】:
标签: javascript node.js puppeteer