成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一日一技:爬蟲模擬瀏覽器如何避免重復登錄?

系統 瀏覽器
當我們使用模擬瀏覽器訪問一個網站的時候,可能會遇到網站需要登錄的情況。我的爬蟲練習網站提供了這樣一個登錄練習[1]的案例。

[[440669]]

當我們使用模擬瀏覽器訪問一個網站的時候,可能會遇到網站需要登錄的情況。我的爬蟲練習網站提供了這樣一個登錄練習[1]的案例。

如果你手動用瀏覽器測試,你會發現這樣一個現象:第一次訪問的時候,自動跳轉到登錄頁面。輸入賬號kingname和密碼genius以后,可以看到登錄成功的頁面,如下圖所示:

現在,你把瀏覽器關了再打開,然后再次訪問這個網址,你會發現瀏覽器直接就能進入到登錄成功的頁面,不會再出現登錄頁面。

我們都知道,這是因為瀏覽器記住了網站的Cookies,即使關閉了瀏覽器再打開,這個Cookies依然存在,所以可以繞過登錄功能。

但如果你使用Selenium或者Puppeteer/Pyppeteer,那么情況就不是這樣了。當你第一次登錄成功了以后,退出程序。第二次重新運行程序的時候,爬蟲又要重新登錄一次。這個過程一來拖慢了爬蟲的運行速度,二來容易讓網站檢測到你的賬號異常——難道自動登錄功能失效了?為什么其他人的都正常,他的賬號每小時都要重新登錄一次?可能是爬蟲,發個驗證碼過去探探虛實。

同理,還有時候,網站登錄會出現很麻煩的驗證碼,但是一旦登錄成功,這個驗證碼就再也不會出現了。處理這種驗證碼最簡單的辦法就是直接人工參與。那么如果爬蟲每小時都要運行一次,豈不是每小時都要人來過一次驗證碼?能不能讓爬蟲只登錄一次,之后就再也不登陸了呢?

方法有兩個。第一個方法,也是大家最直觀能想到的方法:登陸成功以后,把Cookies保存下來。下一次要重新登陸的時候直接把這個Cookies設置到瀏覽器里面可以了。這個方法網上有很多例子,你可以通過關鍵詞“selenium 獲取cookies”和“selenium設置cookies”搜索到,我就不再贅述了。

我們今天要講的是第二個方法,也是最簡單的方法。并且這個方法聽起來很弱智:我不關瀏覽器,它的Cookies不就不會清空了嗎?

但你仔細想一下,根據你之前的經驗,當你的爬蟲代碼退出的時候,是不是瀏覽器也被自動關閉了?即使因為某種原因,爬蟲代碼本身崩潰了,瀏覽器沒有關閉,那你第二次啟動爬蟲的時候,怎么重新連回之前啟動的瀏覽器?

我們今天要做的,就是把啟動瀏覽器和啟動爬蟲,這兩件事情分開。首先使用某種方法單獨啟動瀏覽器,然后再啟動爬蟲代碼,并且讓爬蟲代碼接管這個瀏覽器并控制它。

Chrome瀏覽器是支持遠程調試模式的。這個模式打開的情況下,Puppeteer或者Selenium可以通過websocket連上去,進而控制它。

首先我們來啟動Chrome的遠程調試端口。你需要找到Chrome的安裝位置,在Chrome的地址欄輸入chrome://version就能找到Chrome的安裝路徑,如下圖所示:

有了這個以后,我們需要執行命令啟動支持遠程調試功能的Chrome。如果你的電腦是Mac,那么命令是:

  1. "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"  --remote-debugging-port=9222 --no-first-run --no-default-browser-check --user-data-dir=$(mktemp -d -t 'chrome-remote_data_dir')  

注意,由于地址中有空格,所以要把可執行文件的路徑用引號抱起來。

如果你的電腦是Windows,那么就很簡單了,執行命令:

  1. 文件路徑/chrome.exe --remote-debugging-port=9222 

啟動以后如下圖所示:

此時,你先不要動這個通過命令啟動的Chrome。你先打開普通的瀏覽器,輸入網址:http://127.0.0.1:9222/json/version,如下圖所示:

記住其中的webSocketDebuggerUrl后面的地址。這就是我們遠程鏈接的地址。

今天我們以Puppeteer為例,介紹如何連接這個遠程的Chrome。

在連之前,我們首先做一件事情,在通過命令啟動的這個Chrome中,打開我們的登錄練習頁面,然后手動登錄它。如下圖所示:

然后,我們來寫一段Puppeteer的代碼:

  1. const puppeteer = require('puppeteer-core'
  2.  
  3. async function run(){ 
  4.   var address = 'ws://127.0.0.1:9222/devtools/browser/f6ede2a1-cf7b-4a0d-b0ea-9c0cd24d240d' 
  5.   const browser = await puppeteer.connect({ 
  6.   browserWSEndpoint: address, 
  7. }); 
  8.   const page = await browser.newPage(); 
  9. response = await page.goto('http://exercise.kingname.info/exercise_login_success', { waitUntil: 'load', timeout: 0 }); 
  10. run() 

這段代碼最核心的就兩行,連接遠程的Chrome:

  1. var address = 'ws://127.0.0.1:9222/devtools/browser/f6ede2a1-cf7b-4a0d-b0ea-9c0cd24d240d' 
  2.   const browser = await puppeteer.connect({ 
  3.   browserWSEndpoint: address, 
  4. }); 

運行效果如下圖所示:

可以看到,代碼控制瀏覽器打開了一個新的標簽頁,并且立刻就能打開登錄成功后的頁面,不需要再次登錄。

大家可以試一試,現在在終端窗口里面按下Ctrl + C把當前的爬蟲代碼強行關閉,然后再啟動一次,你會發現依然是登錄以后的頁面。

這樣一來,以后遇到需要登錄的網站,只需要使用這個遠程調試模式,先啟動一個支持遠程調試的Chrome瀏覽器,然后手動在瀏覽器上完成登錄操作,接下來爬蟲代碼就再也不需要考慮登錄這個動作了,爬蟲可以直接訪問登錄后的頁面。

你自己測試的過程中,可能會發現標簽頁越開越多。其實不用擔心,這是因為我為了演示登錄后的頁面,沒有關閉當前標簽頁導致的。你的爬蟲執行完操作以后,可以使用await page.close()關閉當前標簽頁。只要至少保留一個標簽頁不關閉,那么這個瀏覽器窗口就可以一直使用。

如果本文的閱讀量突破2000,我們就來講講用Selenium怎么調用遠程調試功能的Chrome瀏覽器。

參考文獻

[1] 登錄練習: http://exercise.kingname.info/exercise_login_success

本文轉載自微信公眾號「未聞Code」,可以通過以下二維碼關注。轉載本文請聯系未聞Code公眾號。

 

責任編輯:武曉燕 來源: 未聞Code
相關推薦

2022-02-16 20:36:30

瀏覽器PythonJavaScript

2021-12-16 19:04:26

瀏覽器SeleniumChrome

2023-10-28 12:14:35

爬蟲JavaScriptObject

2021-06-08 21:36:24

PyCharm爬蟲Scrapy

2021-10-15 21:08:31

PandasExcel對象

2025-05-28 03:15:00

Scrapy數據sleep

2024-10-16 21:47:15

2020-12-04 06:39:25

爬蟲網頁

2022-01-26 07:35:10

爬蟲Requestsgzip

2022-06-28 09:31:44

LinuxmacOS系統

2024-07-30 08:11:16

2022-03-12 20:38:14

網頁Python測試

2024-07-30 08:16:18

Python代碼工具

2021-09-26 05:01:55

Scrapy項目爬蟲

2024-11-11 00:38:13

Mypy靜態類型

2021-05-08 19:33:51

移除字符零寬

2021-01-08 05:17:16

重復值JSON爬蟲

2021-04-27 22:15:02

Selenium瀏覽器爬蟲

2021-11-12 05:00:43

裝飾器代碼功能

2020-12-11 06:30:00

工具分組DataFrame
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产激情91久久精品导航 | 酒色成人网 | 精品视频久久久久久 | 久久久成人免费视频 | 亚洲精品一区中文字幕乱码 | 国产日韩一区二区三免费高清 | 久久国产亚洲 | 国产精品亚洲视频 | 久久精品视频一区二区 | 国产一区二区欧美 | 久久久久久国产一区二区三区 | 国产精品久久久久久久免费大片 | 日韩av资源站 | 免费视频一区二区三区在线观看 | 亚洲综合日韩精品欧美综合区 | 天天综合网永久 | 台湾佬久久 | 日韩色图视频 | 亚洲成人免费在线观看 | 国产一区二区欧美 | 国产在线精品一区二区三区 | 日韩欧美国产一区二区三区 | xxxxx黄色片| 中文字幕日本一区二区 | 亚洲视频二区 | 亚洲一二三在线 | 男女免费在线观看视频 | 国产欧美一区二区三区在线看 | 日本精品免费 | 暖暖日本在线视频 | 久久大| 亚洲国产精品久久久久 | 免费黄色的视频 | 亚洲黄色高清视频 | 黑人精品欧美一区二区蜜桃 | 欧美日韩在线精品 | 粉嫩高清一区二区三区 | 午夜天堂精品久久久久 | 国产在线资源 | 天天干视频网 | 精品久久久久香蕉网 |