Могу ли я писать сценарий кукловода построчно в окне командной строки node.js? - PullRequest
0 голосов
/ 05 июля 2019

У меня есть веб-сайт, с которого я пытаюсь автоматизировать очистку данных.У меня есть законный аккаунт, и мне нужно упростить мою жизнь, собирая данные программным способом.Проблема в том, что для каждой итерации моего кода кукловода моя учетная запись заново регистрируется, и после нескольких раундов кодирования я получаю электронное письмо от службы (MLS), что они заметили подозрительную активность в моей учетной записи.Мой вопрос заключается в том, можно ли писать скрипт кукловода в реальном времени, чтобы я мог тестировать разные строки кода в одном сеансе?

Пока я пробовал это:

const puppeteer = require('puppeteer');
const fs = require("fs");
const browser = puppeteer.launch({headless: false, ignoreHTTPSErrors: true, args: ['--start-maximized'], defaultViewport: null, slowMo: 150})
const page = browser.newPage();
page.goto('https://idp.sdmls.com/idp/Authn/UserPassword',{waitUntil: 'networkidle2'});

Окна Chromium открываются, но больше ничего.Я получаю это в окне командной строки:

> const puppeteer = require('puppeteer');
undefined
> const fs = require("fs");
undefined
>
> const browser = puppeteer.launch({headless: false, ignoreHTTPSErrors: true, args: ['--start-maximized'], defaultViewport: null, slowMo: 150})
undefined
> const page = browser.newPage();
TypeError: browser.newPage is not a function
> page.goto('https://idp.sdmls.com/idp/Authn/UserPassword',{waitUntil: 'networkidle2'});
ReferenceError: page is not defined
>

1 Ответ

0 голосов
/ 05 июля 2019

puppeteer.launch - это асинхронная функция, которая возвращает Promise. Это означает, что вы должны await для этого в вашей функции async или поместить следующий код в .then().

Поскольку вы хотите использовать командную строку Node.js, вы не можете напрямую await для нее. Есть несколько вариантов:

Вариант 1: введите свой код в .then():

$ node
Welcome to Node.js v12.1.0.
Type ".help" for more information.
> const options = {headless: false, ignoreHTTPSErrors: true, args: ['--start-maximized'], defaultViewport: null, slowMo: 150};
...
> const puppeteer = require('puppeteer');
undefined
> const browserPromise = puppeteer.launch(options);
undefined
> const pagePromise = browserPromise.then(browser => { return browser.newPage(); });
undefined
> pagePromise.then(page => { page.goto('http://stackoverflow.com'); });
Promise { <pending> }

Вариант 2 (подходит для отладки, но не пытайтесь использовать его в своем реальном коде ): сохранить результаты обещания в глобальном объекте и повторно использовать.

> puppeteer.launch(options).then(browser => { global.browser = browser; });
Promise { <pending> }

Подождите некоторое время, пока обещание не разрешится и глобальный объект не будет назначен, затем продолжите:

> global.browser.newPage().then(page => { global.page = page; });
Promise { <pending> }

Подождите снова, затем продолжайте:

> global.page.goto('http://stackoverflow.com')
Promise { <pending> }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...