Puppeter не использует указанный chrome -профиль - PullRequest
1 голос
/ 20 июня 2020

Я помещаю эту команду в оболочку windows bash, чтобы запустить chrome с указанным chrome -профильом

start chrome --remote-debugging-port="${browserId}" --profile-directory="${task.profile}"

Далее: я запускаю кукловода и пробую для подключения к существующему браузеру кукольник открывает два браузера windows. Первый имеет указанный профиль chrome, но затем второй имеет профиль по умолчанию, и именно здесь выполняется вся задача автоматизации. Как я могу убедиться, что кукловод использует первое окно с указанным chrome -профилем

const browser = await puppeteer.connect({browserURL: `http://127.0.0.1:${task.browser}`, defaultViewport:null})

Ответы [ 2 ]

2 голосов
/ 21 июня 2020

Если запускать chrome из bash не является обязательным, но можно запускать самим сценарием Node, вы можете попробовать следующее. (В моем примере я использовал конечную точку websocket для подключения вместо browserUrl, не стесняйтесь выбирать, что лучше соответствует вашим потребностям.)

const browser = await puppeteer.launch({ 
  headless: true, 
  args: [
    `--user-data-dir=${task.profile}`
  ]
})
const browserWSEndpoint = await browser.wsEndpoint()
const browser2 = await puppeteer.connect({ browserWSEndpoint, defaultViewport: null })

Примечание: Убедитесь, что ваш --user-data-dir правильный. Если вы находитесь на Windows, вам понадобится что-то вроде: '--user-data-dir=%userprofile%\\AppData\\Local\\Google\\Chrome\\User Data\\ProfileName'

Чтобы определить каталог данных пользователя для запущенного Chrome экземпляра:

  1. Перейдите к chrome://version
  2. Найдите поле Profile Path. Это дает путь к каталогу профиля.
  3. Каталог пользовательских данных является родительским для каталога профиля.

Пример (Windows):

  • [Путь к профилю] C:\Users\Alice\AppData\Local\Google\Chrome\User Data\Default
  • [Каталог данных пользователя] C:\Users\Alice\AppData\Local\Google\Chrome\User Data

[источник]

0 голосов
/ 22 июня 2020

Итак, я нашел решение: сначала я подключаюсь к существующему браузеру const browser = await puppeteer.connect({browserURL:http://127.0.0.1:port, defaultViewport:null}) А затем я позвонил: const page = await browser.newPage() Это точка, в которой открыты два браузера windows. Итак, что я сделал, было после подключения к существующему браузеру. Я получил все открытые страницы let pages = await browser.pages(), а затем выбрал первую страницу let page = pages[0], так что теперь кукольник использует первое окно браузера с выбранным профилем. Я не понимаю, почему const page = await browser.newPage() открывает новое окно браузера вместо новой страницы в том же окне браузера. Вот как выглядит решение:

const browser = await puppeteer.connect({browserURL: http://127.0.0.1:${task.browser}, defaultViewport:null})

let pages = await browser.pages()

let page = pages[0]

await page.goto(url)
...