Добрый день, есть небольшой парсер на puppeteer.
Возможно это важно, что страницы с
jsp расширением.
Может быть как то по особенному работает загрузка динамического содержимого, чем везде?!
Шаги:
1) Авторизация (отрабатывает)
2) Переход на целевую страницу. (отрабатывает)
3) Клик по подгружаемому элементу. (проблема) . Когда запускается браузер парсера, элемент появляется через незначительное кол-во времени. Потом опять исчезает и снова появляется. (с этим не знаю как бороться)
В качестве ожидания не спасают ни один из следующих приемов. Все варианты размещал перед селектором для последующего клика. Ни один вариант не помог:
1) await page.waitForNavigation();
2) await page.waitForSelector
3)
const sleep = (ms) => new Promise((res) => {
setTimeout(res, ms);
});
sleep(3000)
Код:
const puppeteer = require('puppeteer');
const config = require('./config'); // login, password
const sleep = (ms) => new Promise((res) => {
setTimeout(res, ms);
});
const loginUrl = 'loginUrl';
const craftUrl = 'craftUrl';
(async () => {
const browser = await puppeteer.launch({
headless: false,
args: ['--proxy-server=socks5://127.0.0.1:9050']
});
const page = await browser.newPage();
await page.goto(loginUrl);
await page.$eval('#usernameField', (elem, login) => {
elem.value = login;
}, config.login);
await page.$eval('#passwordField', (elem, password) => {
elem.value = password;
}, config.password);
await page.click('#ButtonBox > .OraButton.left');
await page.waitForNavigation();
await page.goto(craftUrl);
sleep(2000);
await page.waitForSelector('.textdiv').then(() => {
let elements = document.getElementsByClassName('textdiv');
elements[0].click()
});
sleep(5000);
await browser.close();
})();
Выходит ошибка:
PAGE LOG: Window.onshow:[object PageTransitionEvent] trusted:true persisted:false
PAGE LOG: AppsLoginPage.loaded=true
PAGE LOG: call AuthenticateUser
PAGE LOG: Refused to set unsafe header "Connection"
PAGE LOG: Failed to load resource: the server responded with a status of 404 (Not Found)
PAGE LOG: window.unload:
PAGE LOG: JSHandle@object
steps.step1
steps.step2
^[[D
(node:5120) UnhandledPromiseRejectionWarning: TimeoutError: waiting for selector ".textdiv" failed: timeout 30000ms exceeded
at new WaitTask (/var/www/Parsers/teset/node_modules/puppeteer/lib/DOMWorld.js:549:28)
at DOMWorld._waitForSelectorOrXPath (/var/www/Parsers/test/node_modules/puppeteer/lib/DOMWorld.js:478:22)
at DOMWorld.waitForSelector (/var/www/Parsers/test/node_modules/puppeteer/lib/DOMWorld.js:432:17)
at Frame.waitForSelector (/var/www/Parsers/test/node_modules/puppeteer/lib/FrameManager.js:627:47)
at Frame. (/var/www/Parsers/test/node_modules/puppeteer/lib/helper.js:112:23)
at Page.waitForSelector (/var/www/Parsers/test/node_modules/puppeteer/lib/Page.js:1125:29)
at /var/www/Parsers/test/index.js:69:20
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:5120) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:5120) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Подскажите, в чем может быть причина?