Мне удалось успешно просмотреть веб-сайт, войти в систему и получить необходимую информацию. Однако, когда я переключаюсь на использование того же кода с безголовым, который является правдой, время ожидания истекает в каждой строке, где я пытаюсь ждать.
const self = {
browser: null,
page: null,
initialize: async () => {
self.browser = await puppeteer.launch({
headless: true,
});
self.page = await self.browser.newPage();
/* Go to homepage */
await self.page.goto(SHIPT_URL, { waitUntil: "networkidle0" });
},
getResults: async () => {
await self.page.type("#email", email, { delay: 100 });
await self.page.type("#password", password, { delay: 100 });
let loginButton = await self.page.$("button.sc-fzplWN");
if (loginButton) {
await loginButton.click();
await self.page.waitForNavigation({ waitUntil: "networkidle0" }); // Hangs here
await self.page.waitForSelector("a.pointer.link.gray900"); // Hangs here if I remove above waitForNavigation
Я пытался исследовать это и пробовал несколько разных подходов, таких как настройка моего пользовательского агента, добавление .click и waitForNavigation в promise.all, удаление «waitUntil» в waitForNavigation и удаление ожидания на .click, но ничего не работает.
Редактировать. Таким образом, похоже, что вход в систему не работает, он говорит неправильное имя пользователя или адрес электронной почты, что не имеет смысла, поскольку он работает, когда я не нахожусь без головы. Нужно будет изучить это подробнее
1 ответ
Попробуйте сделать скриншот вывода перед запуском ваших команд. Возможно, размер страницы по умолчанию отличается, а селекторов не существует.
Puppeteer устанавливает начальный размер страницы 800×600 пикселей, что определяет размер снимка экрана.
getResults: async () => {
await page.screenshot({path: 'example.png'});
await self.page.type("#email", email, { delay: 100 });
await self.page.type("#password", password, { delay: 100 });
let loginButton = await self.page.$("button.sc-fzplWN");
Похожие вопросы
Новые вопросы
node.js
Node.js — это основанная на событиях, неблокирующая, асинхронная среда выполнения ввода-вывода, использующая движок Google V8 JavaScript и библиотеку libuv. Он используется для разработки приложений, которые интенсивно используют возможность запуска JavaScript как на стороне клиента, так и на стороне сервера и, следовательно, выигрывают от возможности повторного использования кода и отсутствия переключения контекста.
const browser = await puppeteer.launch({ headless: true, defaultViewport: { width: 1200, height: 900 } })