如何解决如何使用 Puppeteer 处理弹出窗口
我正在编写一个脚本来在亚马逊上购买商品。
const puppeteer = require('puppeteer');
// Insert personal credentials
const email = '';
const password = '';
function press_enter(page) {
return Promise.all([
page.waitForNavigation({waitUntil:'networkidle2'}),page.keyboard.press(String.fromCharCode(13))
]);
}
function click_wait(page,selector) {
return Promise.all([
page.waitForNavigation({waitUntil:'networkidle2'}),page.click(selector)
]);
}
(async () => {
const browser = await puppeteer.launch({headless:false,defaultViewport:null,args: ['--start-maximized']});
const page = (await browser.pages())[0];
await page.goto('https://www.amazon.it/');
await click_wait(page,"a[data-nav-role='signin']");
await page.keyboard.type(email);
await press_enter(page);
await page.keyboard.type(password);
await press_enter(page);
// Search for the "signout" button as login proof
if(await page.$('#nav-item-signout') !== null) console.log('Login done!');
else return console.log('Something went wrong during login');
// Navigate to the product page
await page.goto('https://www.amazon.it/dp/B07RL2VWXQ');
// Click "buy now" (choose either Option A or Option B)
// Option A: Here the code get stuck since the page isn't refreshing and page.waitForNavigation() will reach its timeout
// await click_wait(page,"#buy-now-button");
// Option B: Waiting time manually set to 5 seconds (it should be more than enough for popover to fully load)
await Promise.all([page.waitForTimeout(5000),page.click('#buy-now-button')]);
// Conclude the purchase
await click_wait(page,'#turbo-checkout-pyo-button');
})();
到目前为止,我可以登录亚马逊,导航到产品页面并点击立即购买按钮。
然后,如果送货地址和付款选项都已设置,(取决于亚马逊域)它可能会显示一个弹出框来结束购买。
我无法复制 .com
和 .co.uk
上的弹出窗口响应,这些域似乎会将您重定向到一个全新的页面。
当我使用 Chrome 开发者工具浏览页面时,我实际上看到了正在加载的新页面块 (<!DOCTYPE html>
),但我不知道该元素的表示在 Puppeteer 中的位置。
如果我使用 click_wait()
点击立即购买,脚本会卡住(它只会在 page.waitForNavigation()
的默认超时后返回),因此不会被视为刷新页。但即使我在点击立即购买后等待几秒钟,然后尝试点击input[id='turbo-checkout-pyo-button']
(橙色按钮“Ordina”),Puppeteer 也会引发错误原因尽管已明确加载,但它找不到该元素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。