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

一日一技:爬蟲(chóng)模擬瀏覽器如何避免重復(fù)登錄?

系統(tǒng) 瀏覽器
當(dāng)我們使用模擬瀏覽器訪(fǎng)問(wèn)一個(gè)網(wǎng)站的時(shí)候,可能會(huì)遇到網(wǎng)站需要登錄的情況。我的爬蟲(chóng)練習(xí)網(wǎng)站提供了這樣一個(gè)登錄練習(xí)[1]的案例。

[[440669]]

當(dāng)我們使用模擬瀏覽器訪(fǎng)問(wèn)一個(gè)網(wǎng)站的時(shí)候,可能會(huì)遇到網(wǎng)站需要登錄的情況。我的爬蟲(chóng)練習(xí)網(wǎng)站提供了這樣一個(gè)登錄練習(xí)[1]的案例。

如果你手動(dòng)用瀏覽器測(cè)試,你會(huì)發(fā)現(xiàn)這樣一個(gè)現(xiàn)象:第一次訪(fǎng)問(wèn)的時(shí)候,自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面。輸入賬號(hào)kingname和密碼genius以后,可以看到登錄成功的頁(yè)面,如下圖所示:

現(xiàn)在,你把瀏覽器關(guān)了再打開(kāi),然后再次訪(fǎng)問(wèn)這個(gè)網(wǎng)址,你會(huì)發(fā)現(xiàn)瀏覽器直接就能進(jìn)入到登錄成功的頁(yè)面,不會(huì)再出現(xiàn)登錄頁(yè)面。

我們都知道,這是因?yàn)闉g覽器記住了網(wǎng)站的Cookies,即使關(guān)閉了瀏覽器再打開(kāi),這個(gè)Cookies依然存在,所以可以繞過(guò)登錄功能。

但如果你使用Selenium或者Puppeteer/Pyppeteer,那么情況就不是這樣了。當(dāng)你第一次登錄成功了以后,退出程序。第二次重新運(yùn)行程序的時(shí)候,爬蟲(chóng)又要重新登錄一次。這個(gè)過(guò)程一來(lái)拖慢了爬蟲(chóng)的運(yùn)行速度,二來(lái)容易讓網(wǎng)站檢測(cè)到你的賬號(hào)異常——難道自動(dòng)登錄功能失效了?為什么其他人的都正常,他的賬號(hào)每小時(shí)都要重新登錄一次?可能是爬蟲(chóng),發(fā)個(gè)驗(yàn)證碼過(guò)去探探虛實(shí)。

同理,還有時(shí)候,網(wǎng)站登錄會(huì)出現(xiàn)很麻煩的驗(yàn)證碼,但是一旦登錄成功,這個(gè)驗(yàn)證碼就再也不會(huì)出現(xiàn)了。處理這種驗(yàn)證碼最簡(jiǎn)單的辦法就是直接人工參與。那么如果爬蟲(chóng)每小時(shí)都要運(yùn)行一次,豈不是每小時(shí)都要人來(lái)過(guò)一次驗(yàn)證碼?能不能讓爬蟲(chóng)只登錄一次,之后就再也不登陸了呢?

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

我們今天要講的是第二個(gè)方法,也是最簡(jiǎn)單的方法。并且這個(gè)方法聽(tīng)起來(lái)很弱智:我不關(guān)瀏覽器,它的Cookies不就不會(huì)清空了嗎?

但你仔細(xì)想一下,根據(jù)你之前的經(jīng)驗(yàn),當(dāng)你的爬蟲(chóng)代碼退出的時(shí)候,是不是瀏覽器也被自動(dòng)關(guān)閉了?即使因?yàn)槟撤N原因,爬蟲(chóng)代碼本身崩潰了,瀏覽器沒(méi)有關(guān)閉,那你第二次啟動(dòng)爬蟲(chóng)的時(shí)候,怎么重新連回之前啟動(dòng)的瀏覽器?

我們今天要做的,就是把啟動(dòng)瀏覽器和啟動(dòng)爬蟲(chóng),這兩件事情分開(kāi)。首先使用某種方法單獨(dú)啟動(dòng)瀏覽器,然后再啟動(dòng)爬蟲(chóng)代碼,并且讓爬蟲(chóng)代碼接管這個(gè)瀏覽器并控制它。

Chrome瀏覽器是支持遠(yuǎn)程調(diào)試模式的。這個(gè)模式打開(kāi)的情況下,Puppeteer或者Selenium可以通過(guò)websocket連上去,進(jìn)而控制它。

首先我們來(lái)啟動(dòng)Chrome的遠(yuǎn)程調(diào)試端口。你需要找到Chrome的安裝位置,在Chrome的地址欄輸入chrome://version就能找到Chrome的安裝路徑,如下圖所示:

有了這個(gè)以后,我們需要執(zhí)行命令啟動(dòng)支持遠(yuǎn)程調(diào)試功能的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')  

注意,由于地址中有空格,所以要把可執(zhí)行文件的路徑用引號(hào)抱起來(lái)。

如果你的電腦是Windows,那么就很簡(jiǎn)單了,執(zhí)行命令:

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

啟動(dòng)以后如下圖所示:

此時(shí),你先不要?jiǎng)舆@個(gè)通過(guò)命令啟動(dòng)的Chrome。你先打開(kāi)普通的瀏覽器,輸入網(wǎng)址:http://127.0.0.1:9222/json/version,如下圖所示:

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

今天我們以Puppeteer為例,介紹如何連接這個(gè)遠(yuǎn)程的Chrome。

在連之前,我們首先做一件事情,在通過(guò)命令啟動(dòng)的這個(gè)Chrome中,打開(kāi)我們的登錄練習(xí)頁(yè)面,然后手動(dòng)登錄它。如下圖所示:

然后,我們來(lái)寫(xiě)一段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() 

這段代碼最核心的就兩行,連接遠(yuǎn)程的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. }); 

運(yùn)行效果如下圖所示:

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

大家可以試一試,現(xiàn)在在終端窗口里面按下Ctrl + C把當(dāng)前的爬蟲(chóng)代碼強(qiáng)行關(guān)閉,然后再啟動(dòng)一次,你會(huì)發(fā)現(xiàn)依然是登錄以后的頁(yè)面。

這樣一來(lái),以后遇到需要登錄的網(wǎng)站,只需要使用這個(gè)遠(yuǎn)程調(diào)試模式,先啟動(dòng)一個(gè)支持遠(yuǎn)程調(diào)試的Chrome瀏覽器,然后手動(dòng)在瀏覽器上完成登錄操作,接下來(lái)爬蟲(chóng)代碼就再也不需要考慮登錄這個(gè)動(dòng)作了,爬蟲(chóng)可以直接訪(fǎng)問(wèn)登錄后的頁(yè)面。

你自己測(cè)試的過(guò)程中,可能會(huì)發(fā)現(xiàn)標(biāo)簽頁(yè)越開(kāi)越多。其實(shí)不用擔(dān)心,這是因?yàn)槲覟榱搜菔镜卿浐蟮捻?yè)面,沒(méi)有關(guān)閉當(dāng)前標(biāo)簽頁(yè)導(dǎo)致的。你的爬蟲(chóng)執(zhí)行完操作以后,可以使用await page.close()關(guān)閉當(dāng)前標(biāo)簽頁(yè)。只要至少保留一個(gè)標(biāo)簽頁(yè)不關(guān)閉,那么這個(gè)瀏覽器窗口就可以一直使用。

如果本文的閱讀量突破2000,我們就來(lái)講講用Selenium怎么調(diào)用遠(yuǎn)程調(diào)試功能的Chrome瀏覽器。

參考文獻(xiàn)

[1] 登錄練習(xí): http://exercise.kingname.info/exercise_login_success

本文轉(zhuǎn)載自微信公眾號(hào)「未聞Code」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系未聞Code公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 未聞Code
相關(guān)推薦

2022-02-16 20:36:30

瀏覽器PythonJavaScript

2021-12-16 19:04:26

瀏覽器SeleniumChrome

2023-10-28 12:14:35

爬蟲(chóng)JavaScriptObject

2021-06-08 21:36:24

PyCharm爬蟲(chóng)Scrapy

2021-10-15 21:08:31

PandasExcel對(duì)象

2025-05-28 03:15:00

Scrapy數(shù)據(jù)sleep

2024-10-16 21:47:15

2020-12-04 06:39:25

爬蟲(chóng)網(wǎng)頁(yè)

2022-06-28 09:31:44

LinuxmacOS系統(tǒng)

2022-03-12 20:38:14

網(wǎng)頁(yè)Python測(cè)試

2024-07-30 08:11:16

2024-07-30 08:16:18

Python代碼工具

2024-11-11 00:38:13

Mypy靜態(tài)類(lèi)型

2021-05-08 19:33:51

移除字符零寬

2022-01-26 07:35:10

爬蟲(chóng)Requestsgzip

2021-01-08 05:17:16

重復(fù)值JSON爬蟲(chóng)

2021-09-26 05:01:55

Scrapy項(xiàng)目爬蟲(chóng)

2021-11-12 05:00:43

裝飾器代碼功能

2021-04-27 22:15:02

Selenium瀏覽器爬蟲(chóng)

2021-04-12 21:19:01

PythonMakefile項(xiàng)目
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: av在线天天 | 在线看成人av | 国产精品久久久久久久久久99 | 国产日韩精品在线 | 久久久久久国产免费视网址 | 亚洲三区在线观看 | 午夜激情在线视频 | 99精品在线观看 | 超碰97人人人人人蜜桃 | 欧美日韩免费一区二区三区 | 国产98色在线 | 日韩 | 性欧美精品一区二区三区在线播放 | 五月天国产 | 亚洲国产免费 | 久久这里只有精品首页 | 天堂av在线影院 | 久草视频网站 | 久久国产精品一区二区 | 久久亚洲免费 | 欧美精品二区三区 | 电影91久久久 | 在线观看中文字幕 | 伦理片97 | 欧美一区二区三区久久精品视 | 日韩免费在线 | 久久亚洲精品视频 | 欧美人成在线视频 | 国产精品一区二区三区久久久 | 狠狠综合久久av一区二区老牛 | 激情网站在线 | 一区二区三区高清不卡 | 欧美中文字幕在线观看 | 国产精品久久久久久久久久99 | 美女天天干天天操 | 国产精品大全 | 激情一区二区三区 | 久久爱一区 | www.亚洲一区二区三区 | 欧美女优在线观看 | 视频三区 | 国产伦精品一区二区三区照片91 |