Кукловод запускает новую вкладку в текущем окне, а не в новом окне - PullRequest
1 голос
/ 20 марта 2019

Я перепробовал практически все и, похоже, не могу понять, как заставить Puppeteer работать в моем текущем окне браузера (где я вошел в Chrome), а не в новом браузере без выхода из кэша. Вот мой текущий конфиг, настраивающий все. Я попытался запустить Chrome с удаленным портом отладки, загрузить пользовательские данные в аргументах для запуска puppeteer, запустить как Chromium, так и мой текущий путь установки Chrome и т. Д. Вот мой текущий код:

const opts = {
  logLevel: 'info',
  output: 'json'
};


const chrome = await chromelauncher.launch( {port:9222 });
opts.port = chrome.port;

// Connect to it using puppeteer.connect().
const resp = await util.promisify(request)(`http://localhost:${opts.port}/json/version`);
const {webSocketDebuggerUrl} = JSON.parse(resp.body);
const browser = await puppeteer.connect({browserWSEndpoint: webSocketDebuggerUrl, 
  args: ["--disable-extensions"]});
const page = await browser.newPage();
await page.setViewport({ width: 1366, height: 768});

У меня закончились ресурсы, чтобы посмотреть, если что-то не так, пожалуйста, дайте мне знать. Спасибо!

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Вы должны использовать userDataDir для повторного использования кэша.

puppeteer.launch({
  userDataDir: 'PATH TO DATA FOLDER',
})

Вы можете найти свой каталог данных здесь,

  • Windows 7, 8.1 и 10: C:\Users\<username>\AppData\Local\Google\Chrome\User Data\Default
  • Mac OS X El Capitan: Users/<username>/Library/Application Support/Google/Chrome/Default
  • Linux: /home/<username>/.config/google-chrome/default

Другой способ - открыть chrome://version и выбрать путь оттуда,

enter image description here

Теперь удалите Default, и вы получите каталог данных,

  • [Путь к профилю] C:\Users\Alice\AppData\Local\Google\Chrome\User Data\Default
  • [User Data Dir]C:\Users\Alice\AppData\Local\Google\Chrome\User Data

Итак, код будет выглядеть следующим образом:

puppeteer.launch({
  userDataDir: `C:\Users\Alice\AppData\Local\Google\Chrome\User Data`, 
  // <-- notice I used backtick to avoid writing backslashs
})

Подробнее о каталоге данных здесь .

Еще один интересный аргумент--profile-directory, Вы можете назвать профиль и использовать его.

--profile-directory=Default
0 голосов
/ 21 марта 2019

Не уверен, что это полезно для вашего случая, так как я использую браузер Chromium, а не системный браузер Chrome, но сохраняю настройку Chromium внутри проекта PeaceOut.Я все еще учусь использовать кукловод, поэтому, возможно, не все делаю лучше всего.

const browser = await puppeteer.launch({
    headless: false,
    devtools: true,
 // slowMo: 250 // slow down by 250ms
 // executablePath <string> Path to a Chromium or Chrome executable to run
    userDataDir: 'C:\\Users\\TeDev\\Scrape\\PeaceOut\\bdata' 
 // userDataDir <string> Path to a User Data Directory.
});
const page = await browser.pages();
await page[0].setViewport({ width: 1280, height: 1080 })
console.log(`Trying to access ${URL}`);
await page[0].goto(URL);  // use tab 0, so Chromium doesn't show a blank tab.
...