Search code examples
javascriptnode.jsautomationpuppeteerwebautomation

Not able to click on a button using puppeteer


I am using puppeteer.

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

so how the site works is, the user will need to input the email 1st, then the button will be available to select. Weirdly the code above does not work. I have tried doing a timeout of a couple of seconds to wait till the button is available but nope. Heres the link to the page. Can anyone help?


Solution

  • You can give this a try.

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

    Or you can try 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');
      }
    }
    

    Or you can try and use 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');
      }
    }