如何使用 Puppeteer 登录 Google?

Dav*_*tro 8 javascript automation puppeteer

我正在使用 Puppeteer 并且正在尝试登录我的 Gmail 帐户

网址:https://accounts.google.com/ServiceLogin/identifier ?service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&ss=1&scc=1<mpl=default<mplcache=2&emr=1&osid= 1&flowName=GlifWebSignIn&flowEntry=AddSession

目前我的代码输入电子邮件表单并提交输入,然后当页面进入密码屏幕时,无法在输入中写入密码。这可能是因为它在技术上不是新页面,而是相同的。不管怎样,当我在电子邮件页面上按 Enter 时,我似乎无法与这个新页面进行交互。

我尝试了很多方法,但都没有效果。

const elementHandle = await page.$('input');
await elementHandle.type('dp-conference@digitalpulp.com');
  await page.click("#identifierNext");

//goes to new page
//this code does not work. 
const pw = await page.$('input[type="password"]');


page.on('load', () => console.log("Loaded: " + page.url()));
Run Code Online (Sandbox Code Playgroud)

})

小智 8

这个完整的脚本应该可以工作,请注意,如果您已经登录或者您的帐户使用两步身份验证,这不会处理,祝您好运

const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch({ headless: false})
  const page = await browser.newPage()

  const navigationPromise = page.waitForNavigation()

  await page.goto('https://accounts.google.com/')

  await navigationPromise

  await page.waitForSelector('input[type="email"]')
  await page.click('input[type="email"]')

  await navigationPromise

  //TODO : change to your email 
  await page.type('input[type="email"]', 'youremail@gmail.com')

  await page.waitForSelector('#identifierNext')
  await page.click('#identifierNext')

  await page.waitFor(500);

  await page.waitForSelector('input[type="password"]')
  await page.click('input[type="email"]')
  await page.waitFor(500);

  //TODO : change to your password
  await page.type('input[type="password"]', 'yourpassword')

  await page.waitForSelector('#passwordNext')
  await page.click('#passwordNext')

  await navigationPromise

  //await browser.close()
})()
Run Code Online (Sandbox Code Playgroud)

  • 我认为这不再起作用了 gmail 正在阻止使用 puppeteer 、 selenuim .... 浏览器或应用程序登录,我不安全,而且我仍然没有找到任何解决方案 (3认同)
  • @ABDELJALILAITETALEB 你有没有找到一种使用这些抓取工具登录谷歌的方法(我个人正在寻找木偶师)? (2认同)
  • @justanotherguy这是我使用过的一些代码https://gist.github.com/smartdev10/d7323163c8346c97a9625b18d04ebbc0 (2认同)

bro*_*ess 0

如果发生页面加载,则后续命令/脚本将无法工作,因为它们未正确加载。为此,有waitForNavigation方法。

您的代码将类似于:

const elementHandle = await page.$('input');
await elementHandle.type('dp-conference@digitalpulp.com');
await page.click("#identifierNext");

// Wait for next pageload
await page.waitForNavigation(waitOptions)
const pw = await page.$('input[type="password"]');
Run Code Online (Sandbox Code Playgroud)