ページ遷移で使用するPageクラスのドキュメントは以下になります。
指定URLへの移動 (goto)
指定URLに移動する場合は、gotoメソッドを使用します。タイムアウトはデフォルトで30秒になっています。
page.goto(url[, options])
Googleのトップページに移動するなら以下のようにします。
page.goto('https://www.google.co.jp/')
BASIC認証のページへ移動
BASIC認証があるページでは、遷移前に以下のコマンドで、BASIC認証のIDとパスワードを設定します。 このあとpage.gotoで遷移すれば、BASIC認証があるページもアクセス可能となります。
page.authenticate({username: [ID], password: [パスワード]})
例 IDが 'uname'、パスワードが 'pass2020' の場合、以下のように指定します。
await page.authenticate({username: 'uname', password: 'pass2020'}); awit page.goto('BASIC認証のあるURL’);
クリックして移動 (click)
Aタグのリンクやsubmitボタンをクリックして他ページへ遷移する場合は、以下を使用します。 ページ遷移は、遷移待ちと組み合わせて使うことになりますが、この組み合わせにには注意が必要です。
page.click(selector[, options])
waitForNavigationとの組み合わせ
page.clickは、クリック処理だけ行い、ページ遷移は関知しません。 そのため、以下でも多くは動作しますが、ページ遷移が速い場合、page.click処理完了前にページ遷移が終わっている可能性があります。
await page.click('#a_link') await page.waitForNavigation()
await Promise.all([ page.waitForNavigation(), page.click('#a_link'), ]);
参考
デフォルトのタイムアウトは30秒で長いので、以下のようにオプションで5秒に変更したコードを用意します。
await page.click('#a_link') await page.waitForNavigation({timeout: 5000})
ローカル環境などのページ遷移が速い環境で試すと、waitForNavigationで以下のようにタイムアウトが発生することがあります。
(node:13684) UnhandledPromiseRejectionWarning: TimeoutError: Navigation timeout of 5000 ms exceeded
Promise.allを使っても、以下のように順番が間違っていると(page.clickを先に実行)、タイムアウトエラーが発生することがあります。
await Promise.all([ page.click('#a_link'), page.waitForNavigation({timeout: 5000}), ]);
ページ遷移待ち
ページ遷移は、ページ遷移待ちとセットで使用することになります。ページ遷移待ちについては以下を参照