首页 > 解决方案 > 无法使用 puppeteer 单击按钮

问题描述

我正在使用木偶。

await page.type('#guestEmail', email);
await page.click("#checkoutGuest");

所以网站的工作原理是,用户需要先输入电子邮件,然后按钮才能选择。奇怪的是上面的代码不起作用。我尝试过几秒钟的超时来等待按钮可用,但不行。这是该页面的链接。任何人都可以帮忙吗?

标签: javascriptnode.jsautomationpuppeteerwebautomation

解决方案


你可以试试这个。

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');
  }
}

推荐阅读