javascript - 无法使用 puppeteer 单击按钮
问题描述
我正在使用木偶。
await page.type('#guestEmail', email);
await page.click("#checkoutGuest");
所以网站的工作原理是,用户需要先输入电子邮件,然后按钮才能选择。奇怪的是上面的代码不起作用。我尝试过几秒钟的超时来等待按钮可用,但不行。这是该页面的链接。任何人都可以帮忙吗?
解决方案
你可以试试这个。
let browser, page;
let pageUrl = 'https://www.jdsports.com.sg/checkout/login/';
let email = 'testing@gmail.com';
try {
browser = await puppeteer.launch({ headless: true });
page = await browser.newPage();
await page.goto(pageUrl, { waitUntil: 'domcontentloaded', timeout: 60000 });
await page.type('#guestEmail', email);
await page.waitForSelector('button#checkoutGuest:not([disabled])');
await page.click("#checkoutGuest");
} catch (err) {
console.log(err.message);
} finally {
if (browser) {
await browser.close();
console.log('closing browser');
}
}
或者您可以尝试 page.evaluate。
let browser, page;
let pageUrl = 'https://www.jdsports.com.sg/checkout/login/';
let email = 'testing@gmail.com';
try {
browser = await puppeteer.launch({ headless: true });
page = await browser.newPage();
await page.goto(pageUrl, { waitUntil: 'domcontentloaded', timeout: 60000 });
await page.type('#guestEmail', email);
await page.evaluate(() => {
if (!document.getElementById('checkoutGuest').disabled) {
await page.click("#checkoutGuest");
}
});
} catch (err) {
console.log(err.message);
} finally {
if (browser) {
await browser.close();
console.log('closing browser');
}
}
或者您可以尝试使用 waitForFunction。
let browser, page;
let pageUrl = 'https://www.jdsports.com.sg/checkout/login/';
let email = 'testing@gmail.com';
try {
browser = await puppeteer.launch({ headless: true });
page = await browser.newPage();
await page.goto(pageUrl, { waitUntil: 'domcontentloaded', timeout: 60000 });
await page.type('#guestEmail', email);
await page.waitForFunction('document.getElementById("checkoutGuest").className != "btn btn-level1 large disabled"');
} catch (err) {
console.log(err.message);
} finally {
if (browser) {
await browser.close();
console.log('closing browser');
}
}
推荐阅读
- php - Symfony 4 路由不使用方法参数
- java - 如何在 Android Studio 中生成随机字母
- r - 使用 dplyr 更改列类型
- twitter-bootstrap - Theming Bootsrap 4 - Color-yiq 作为变量覆盖
- r - 创建 RPKM 分析的热图
- android - 在 Android 应用中显示弹出子菜单时隐藏顶级菜单
- javascript - 在 React 中渲染图像
- node.js - Typescript Google API 编译错误
- php - 从两个表中获取信息
- python - Python 中的 List-Then-Eliminate 实现