Заставить Puppeteer использовать куки-файлы локального профиля

Я хочу использовать свой профиль локального пользователя с Puppeteer. Однако, похоже, это не работает.

Запускаю с этими аргументами.

const browser = await puppeteer.launch({
    executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
    userDataDir: '/Users/me/Library/Application Support/Google/Chrome',
});

В режиме без головы он вообще не использует файлы cookie локального профиля пользователя, хотя я бы ожидал, что это так. Когда он не безголовый, он даже не может открыть вкладку; Puppeteer тормозит с

(node:23303) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome!


TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

Есть ли способ использовать профиль моего локального пользователя? Я использую ^1.7.0 и Chrome 70.0.3521.2.


person Puppeteer user    schedule 15.08.2018    source источник
comment
Я тоже искал решение этой проблемы. Похоже, что единственное текущее рабочее решение - это слишком сложно внедрить файлы cookie.   -  person user1768079    schedule 29.11.2018


Ответы (3)


Я решил эту проблему в MacOS, установив Chrome Canary, скопировав папку по умолчанию, содержащуюся в ~/Library/Application Support/Google/Chrome/Default, в ~/Library/Application Support/Google/Chrome\ Canary/Default

Мой рабочий код выглядит так:

async function run() {
  const browser = await puppeteer.launch({
    headless: false, 
    executablePath: '/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary',
    userDataDir: '/Users/radium/Library/Application\ Support/Google/Chrome\ Canary/',
  });
}

Раньше я использовал путь к файлу до папки по умолчанию и обрезал его до папки «Chrome Canary». Это все исправило. С штатным хромом не пробовал.

person user1768079    schedule 30.11.2018
comment
Прошу прощения за плохое форматирование. Я не публиковал много ответов на stackoverflow и не уверен, как правильно форматировать ... Я просто копирую вставку из моего редактора. - person user1768079; 30.11.2018

Вместо того, чтобы указывать путь userDataDir в Puppeteer.launch аргументах, вы можете использовать пакет NPM chrome-cookies-secure для использовать файлы cookie для одного из существующих профилей Chrome. Это решение не требует установки Chrome Canary.

С вашей авторизацией связки ключей macOS пакет считывает файлы cookie для данного url с вашего жесткого диска и делает их доступными в NodeJS. Затем вы можете загрузить их в Puppeteer, используя метод page.setCookie(...).

Вот пример:

const chrome = require('chrome-cookies-secure');
const puppeteer = require('puppeteer');

const url = 'https://www.yourUrl.com';

const getCookies = (callback) => {
    chrome.getCookies(url, 'puppeteer', function(err, cookies) {
        if (err) {
            console.log(err, 'error');
            return
        }
        console.log(cookies, 'cookies');
        callback(cookies);
    }, 'yourProfile') // e.g. 'Profile 2'
}

// find profiles at ~/Library/Application Support/Google/Chrome

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

    await page.setCookie(...cookies);
    await page.goto(url);
    await page.waitFor(1000);
    browser.close()
});
person Reece Daniels    schedule 11.06.2019

для Windows вам необходимо установить chrome-cookies-secure

const chrome = require('chrome-cookies-secure');
const puppeteer = require("puppeteer");
(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    executablePath: 'C:/Program Files/Google/Chrome/Application/chrome.exe',
    userDataDir: 'C:/Users/osama/AppData/Local/Google/Chrome/User Data/Default/',
  });
  const page = await browser.newPage();
  await page.goto("https://stackoverflow.com/");
})();
person osama mostafa    schedule 07.12.2020