Login with Google
On this page
          
        Social login using your personal Google or Google Gsuite account is a common use case for many login scenarios.
Steps
- We start at a site that offers Google as an authentication provider. In this case we use Stack Overflow.
- We fetch the login page and click the “Login with Google” button.
- We are redirect to Google.
- We provide the username and password, injected by using environment variables.
- We are redirected back to the starting.
const { webkit } = require('playwright')
;(async () => {
  const browser = await webkit.launch()
  const page = await browser.newPage()
  await page.setViewport({ width: 1280, height: 800 })
  await page.goto('https://stackoverflow.com/users/login')
  await page.click('button.s-btn__google')
  await page.fill('input[type="email"]', process.env.GOOGLE_USER)
  await page.click('#identifierNext')
  await page.fill('input[type="password"]', process.env.GOOGLE_PWD)
  await page.click('#passwordNext')
  await browser.close()
})()
const puppeteer = require('puppeteer')
;(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.setViewport({ width: 1280, height: 800 })
  await page.goto('https://stackoverflow.com/users/login')
  const navigationPromise = page.waitForNavigation()
  await page.waitForSelector('button.s-btn__google')
  await page.click('button.s-btn__google')
  await navigationPromise
  await page.waitForSelector('input[type="email"]')
  await page.type('input[type="email"]', process.env.GOOGLE_USER)
  await page.click('#identifierNext')
  await page.waitForSelector('input[type="password"]', { visible: true })
  await page.type('input[type="password"]', process.env.GOOGLE_PWD)
  await page.waitForSelector('#passwordNext', { visible: true })
  await page.click('#passwordNext')
  await navigationPromise
  await browser.close()
})()
Run this example as follows. Replace the username and password placeholder with your own credentials.
GOOGLE_USER=username GOOGLE_PWD=password node google-login.js
SET GOOGLE_USER=username
SET GOOGLE_PWD=password
node google-login.js
This example does not work when you have 2-factor authentication enabled, and you might trigger a recaptcha check.
Takeaways
- Use environment variables to inject secrets.
- Wait for the navigation as your are redirected to Google.
- Wait for the navigation as you are redirected back to the start site.