【发布时间】:2021-11-09 13:05:22
【问题描述】:
我要点击的项目是针对澳大利亚的收银台。为了完成结帐过程,您必须单击下图中所示的框之一:illustration of object I am trying to click 我留下的错误是该框未选中因此阻碍了我的结帐过程,即使 puppeteer 能够找到元素。
这里是元素的代码:
<label for="delivery-home-delivery" role="radio" aria-checked="false" tabindex="0" aria-label="select Home Delivery" class="DeliveryItem"><div class="CheckMark"></div><p class="Heading Heading--collapse Heading--h3 Heading--thin">Home Delivery</p><p class="Paragraph Paragraph--collapse Paragraph--tiny">$9 standard delivery.<br>Free for orders over $45</p></label> <input type="radio" class="u-visuallyHidden" id="delivery-home-delivery" name="delivery" tabindex="-1">
这是我的 JS 代码:
(async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto('https://www.target.com.au/p/optus-oppo-a53-mobile-phone/65110003', {
waitUntil: 'networkidle0',
});
const [button] = await page.$$("#addToCartForm > div.prod-buttons-wrapper > div > div > button");
let buttonclick = 1;
while(buttonclick==1)
{
if (button) {
console.log("element found");
await page.click("#addToCartForm > div.prod-buttons-wrapper > div > div > button");
break
}
await page.reload({waitUntil: ['networkidle0']});
console.log("element not found");
console.log(buttonclick);
const [overlay] = await page.$x("/html/body/div[5]");
if (overlay) { await page.mouse.click(10, 20, {button: 'left'});}
try{
await page.click("#addToCartForm > div.prod-buttons-wrapper > div > div > button");
break;}
finally{
buttonclick = 2;}
}
await page.goto("https://www.target.com.au/spc/order", {waitUntil: 'networkidle0',});
const [emailbox] = await page.$x('//*[@id="CustomerEmailSearch.j_username"]');
if(emailbox){
await emailbox.type('gamingbradda01@gmail.com');
console.log("emailbox found");
}
else{
console.log("im sorry pupeteer cant see that");
}
await page.click('#continue');
const homedeliv = await page.waitForSelector('#delivery-home-delivery');
if (homedeliv){console.log("we found home delivery item in checkout page");}
await page.click("#delivery-home-delivery");
const frame = await page.waitForSelector("body > div.CheckoutPage > div > div.Root > div > div.Page > div > div > section > span:nth-child(1) > div > div > div > section > div.DeliveryModeSelection.is-unselected > label:nth-child(3)");
//^This is one method I tested which finds the x and y coordinate of element than later clicks on it.
const rect = await page.evaluate(el => {
const {x, y} = el.getBoundingClientRect();
return {x, y};
}, frame);
console.log(rect.x);
console.log(rect.y);
await page.mouse.click(rect.x, rect.y, {button:'left', clickCount:2});
console.log("click by element location found using puppet no work");
await page.mouse.click(500, 450, {button:'left', clickCount: 2});
await page.mouse.move(30, 20);
})();
【问题讨论】:
标签: javascript node.js puppeteer