Для этого примера я использую 3 файла browserInstance. js, reuseBrowserInstance. js и config. json.
Я запускаю browserInstance. js, он открывает браузер хрома в режиме headfull и используйте первую вкладку / страницу, которая появляется "about: blank" и просто go, чтобы google сохранить browser.wsEndpoint () в конфигурации. json и отключить (не закрывать).
Затем в другой терминал, который я запускаю reuseBrowserInstance. js, он подключается к browser.wsEndpoint () из открытого браузера и просто набирает текст и нажимает в этом случае, это всего лишь пример.
Он работает нормально в в первый раз я запускаю reuseBrowserInstance. js, но во второй раз он останавливается на шаге 3 и не продолжается. Шаг 4 - это нажатие на кнопку «Поиск Google» (я помещаю некоторые журналы консоли, если кто-то пытается воспроизвести это, чтобы увидеть, где где он ломается).
browserInstance. js
const puppeteer = require('puppeteer');
const fs = require('fs');
const config = require('./config.json');
(async () => {
const browser = await puppeteer.launch({
headless: false,
defaultViewport: { width: 1920, height: 1080 },
args: ['--start-maximized', '--disable-notifications']
});
// use page1 as first tab
const page1 = (await browser.pages())[0];
await page1.goto('https://www.google.com/');
// save browserWSEndpoint in json
config.wsEndPoint = browser.wsEndpoint();
fs.writeFileSync('config.json', JSON.stringify(config));
// disconnect browser
browser.disconnect();
})();
reuseBrowserInstance. js
const puppeteer = require('puppeteer');
const fs = require('fs');
const config = require('./config.json');
(async () => {
const browser = await puppeteer.connect({
browserWSEndpoint: config.wsEndPoint,
defaultViewport: { width: 1920, height: 1080 }
});
// use page1 as first tab
const page1 = (await browser.pages())[0];
// type in search
await page1.type('#tsf > div:nth-child(2) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input', 'test', { delay: 20 });
console.log('Step 1 - Done.');
// click serch button
await page1.click('#tsf > div:nth-child(2) > div.A8SBwf.emcav > div.UUbT9 > div.aajZCb > div.tfB0Bf > center > input.gNO89b');
console.log('Step 2 - Done.');
// wait for page loaded
await page1.waitForNavigation( { waitUntil: "load" } );
//await page1.waitFor(1000);
console.log('Step 3 - Done.');
// do something
await page1.click('#rso > div > div > div:nth-child(1) > div > div > div.r > a > h3');
console.log('Step 4 - Done.');
// just wait for little
await page1.waitFor(3000);
console.log('Step 5 - Done.');
//go back to inicial page
await page1.goto('https://www.google.com/');
console.log('Step 6 - Done.');
// disconnect
browser.disconnect();
console.log('Finished.');
})();
config. json
{"wsEndPoint":"ws://127.0.0.1:58438/devtools/browser/BLABLA BLABLA"}