Почему chrome не может вспомнить предыдущую сессию с кукловодом? - PullRequest
0 голосов
/ 18 марта 2020

Я на самом деле пытаюсь использовать кукловода для очистки, и мне нужно использовать свой текущий chrome, чтобы сохранить все свои учетные данные. Однако chrome не может вспомнить предыдущую сессию, и мне приходится каждый раз нажимать кнопку входа. Напротив, chrome может запомнить сохраненные учетные данные. Есть ли способ сделать это?

Я на самом деле использую: Node v12.16.1 chrome 80.0.3987.132 (Официальная сборка) (64-разрядная версия) (когорта: стабильная) puppeteer-core 2.1.0 // см .: https://github.com/puppeteer/puppeteer/blob/v2.1.0/docs/api.md

тест. js:

const pptr = require('puppeteer-core');

(async () => {
  const browser = await pptr.launch({
    executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',//path to your chrome
    headless: false,
    args:[
                '--user-data-dir=D:/Users/xxx/AppData/Local/Google/Chrome/User Data2',
        ]
    });
  const page = await browser.newPage();
  await page.goto('https://hostloc.com');
  await page.screenshot({path: 'example.png'});
  await page.waitFor(10000);

  await browser.close();
})();

1 Ответ

1 голос
/ 18 марта 2020

Вы должны использовать куки, чтобы вы могли получать от них предыдущие данные. Вот ссылка о наборе повара ie в кукловоде.

Здесь ниже приведен пример кода для установки файлов cookie в кукловоде. Он устанавливает свойство «login_email» в Paypal cook ie, поэтому экран входа в систему предварительно заполнен адресом электронной почты.

const cookie = {
  name: 'login_email',
  value: 'set_by_cookie@domain.com',
  domain: '.paypal.com',
  url: 'https://www.paypal.com/',
  path: '/',
  httpOnly: true,
  secure: true
}

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.setCookie(cookie)
  await page.goto('https://www.paypal.com/signin')
  await page.screenshot({ path: 'paypal_login.png' })
  await browser.close()
})()

Что касается получения файлов cookie, вы можете создать Chrome Сеанс протокола DevTools на целевой странице с использованием target.createCDPSession () . Затем вы можете отправить Network.getAllCookies , чтобы получить список всех файлов cookie браузера.

Функция page.cookies () будет возвращать куки только для текущего URL. Таким образом, мы можем отфильтровать файлы cookie текущей страницы из всех файлов cookie браузера, чтобы получить список только сторонних файлов cookie.

const client = await page.target().createCDPSession();
const all_browser_cookies = (await client.send('Network.getAllCookies')).cookies;
const current_url_cookies = await page.cookies();
const third_party_cookies = all_browser_cookies.filter(cookie => cookie.domain !== current_url_cookies[0].domain);

console.log(all_browser_cookies); // All Browser Cookies
console.log(current_url_cookies); // Current URL Cookies
console.log(third_party_cookies); // Third-Party Cookies

Например, получить все файлы cookie

const puppeteer = require('puppeteer');
(async() => {
  const browser = await puppeteer.launch({});
  const page = await browser.newPage();
  await page.goto('https://stackoverflow.com', {waitUntil : 'networkidle2' });

  // Here we can get all of the cookies
  console.log(await page._client.send('Network.getAllCookies'));

})();

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...