Повторное использование экземпляра браузера и страницы - щелчок элемента выдачи Puppeteer - PullRequest
0 голосов
/ 01 марта 2020

Для этого примера я использую 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"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...