Правильный способ навигации с помощью щелчка и ожидания загрузки страницы - использовать Promise.all () и page.waitForNavigation () , например:
await Promise.all([
page.waitForNavigation(),
page.click('#some-link')
]);
Однако при навигации по page.goto () вышеприведенное не требуется, поскольку page.goto()
автоматически ожидает загрузки страницы.
В обоих случаяхВы можете настроить ожидаемое событие, используя параметр waitUntil
, который по умолчанию равен событию load
.
page.goto (url [, options])
url
URL для перехода на страницу.URL должен включать схему, например, https://
. options
Параметры навигации, которые могут иметь следующие свойства: timeout
Максимальное время навигации в миллисекундах, по умолчанию 30 секунд, проход0
для отключения тайм-аута.Значение по умолчанию можно изменить с помощью метода page.setDefaultNavigationTimeout (timeout). waitUntil
Когда навигация считается успешной, по умолчанию используется load
.При наличии массива строк событий навигация считается успешной после запуска всех событий....
Если объединить это, пример входа будет:
const page = await browser.newPage();
await page.goto('https://website/login');
await page.type('input[type="email"]', 'foo@example.com');
await page.type('input[type="password"]', 'pass1234');
await Promise.all([
page.waitForNavigation(),
page.click('button')
]);
// Now we are on the home page (or wherever we end up after logging in)
Некоторые другие примечания:
- Возможно, вам придется использовать page.waitForSelector () или другие формы ожидания, если событие страницы
load
срабатывает до того, как поле input
будет готово. - Youв качестве альтернативы можно отправить форму входа в систему, нажав клавишу Enter на клавиатуре.Для этого по-прежнему требуется шаблон
Promise.all()
, но это означает, что вам не нужен селектор для кнопки отправки.Вам может понадобиться .click()
одно из полей input
в зависимости от того, как реализована страница (например, если страница не использует autofocus
).