puppeteer chrome/chrome canary 登入瀏覽器

weixin_34320159發表於2019-01-24

如果你的自動化測試場景有需要登入Chrome去authorize的話,肯定會用到這些步驟的
之前用selenium也實驗過用本地的profile去模擬已經登入的場景,但是當點選去登入時,頁面一直轉轉轉,一片空白,一片空白,空白

轉戰puppeteer之後,可以正常開啟authorization頁面耶,這是成功的表現
親兒子鴨

官方資料顯示,在使用puppeteer去操作authorize的時候,不能使用chromium(我本地使用chromium去登入時就沒登入上去過),so 需要在launch browser時必須指定要執行的browser(預設是使用chromium),請使用executablePath,Chrome和 Chrome canary都可以支援

executablePath:'/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary',

executablePath:'/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome',

and then,也需要指定你本地已經登入到瀏覽器的profile

userDataDir:'~/Documents/Google/Chrome',

本地的profile最好是拷貝到一個路徑下,每次要測試authorize的時候,都需要操作一步拷貝的動作,因為每次執行完之後profile都會被新的操作覆蓋,不是“乾淨”的了
摘自官方的程式碼puppeteer user-data-dir

const puppeteer = require('puppeteer');

(async () => {
  const datadir = '/tmp/profile/';
  const browser = await puppeteer.launch({
      // Ask puppeteer to run Chrome Canary
      executablePath: '/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary',
      headless: false,
      userDataDir: datadir,
  });
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({ path: 'example.png', fullPage: true });
  await browser.close();

})();

如果launch browser以後,有new一個新的page,新page的登入狀態沒有帶過去,要在自啟動的browser上new tab即可

相關文章