使用selenium 寫爬蟲讀取網頁內容是很常見的需求,不過你可能會遇到需要先登錄帳號才能爬取內容的網頁,像是博客來上限制級的書就是這樣的例子,你會看到如下的交談窗:
由於登錄帳號後會利用 cookie 記錄已登錄資訊,為了讀取這樣的網頁,我們可以先手動登錄,登錄之後匯出 cookie 到檔案。之後利用 selenium 爬取網頁時,再將匯出的 cookie 重新加入,重新整理網頁即可正常讀取網頁內容了。
請先利用 selenium 開啟欲讀取的網頁,這裡以部落格來為例:
這時請依照正常程序登入會員,然後安裝 cookie_editor 外掛:
請記得切回部落格來的首頁,利用外掛以 JSON 格式匯出所有的 cookie:
它會將 cookie 內容複製到剪貼簿上,請自行貼到文字編輯器存檔。
接著把 selenium 關閉,再重新開啟:
要加入 cookie,一定要在跟 Cookie 相同網域的網頁,所以要記得先開啟部落格來網頁。接著就可以開啟儲存 cookie 的檔案,載入成為 Pytho 的字典:
再把 cookie 一一加回去:
這時你應該會看到以下的錯誤:
這是因為cookie-editor 匯出的資料中,在sameSite 屬性中是以null 表示"no_restriction" 表示沒有限制一定要是同一個網站,但是selenium 只認得"Strict", "Lax", "None"這三種限制,所以診斷為錯誤,我們必須手動修改JSON 檔,自行把所有sameSite屬性值都改為"None"(注意是字串喔),也請檢查把網域不是".books.com.tw " 的cookie 刪除:
修改完之後,重新載入並加入 cookie 就不會出錯了。
加入 cookie 後,你看到的畫面仍然是未登入的畫面:
必須重新整理網頁才能讓 cookie 生效:
看到的就是登錄會員的頁面了:
這樣就可以利用 selenium 讀取需要登入會員的頁面了。
最後要提醒的就是 cookie 都有時效,如果一段時間過後無法利用先前儲存的 cookie 登錄,只要重新依據上述步驟重新取得 cookie 就可以了。
以上是使用 selenium 讀取需要登入會員的網頁的詳細內容。更多資訊請關注PHP中文網其他相關文章!