selenium登錄爬取知乎出現:請求異常請升級客戶端后重試的問題(用Python中的selenium接管chrome)


一、問題
使用selenium自動化測試爬取知乎的時候出現了:錯誤代碼10001:請求異常請升級客戶端后重新嘗試,這個錯誤的產生是由於知乎可以檢測selenium自動化測試的腳本,因此可以阻止selenium的繼續訪問。這也算是比較高級的反爬取措施。

二、解決
解決方法,使用自己打開的一個瀏覽器,再用selenium接管這個瀏覽器這樣就可以完成反爬的處理。
1.建議一個新的映射,以保存原來的chrome不被污染
1)添加環境變量
chrome.exe放入系統環境變量中,找到驅動位置添加變量,如果沒找到,最快的方法就是點擊圖標右鍵,點擊訪問文件地址
chrome.exe位置


快捷訪問方式,在菜單欄同樣可以


2)新建一個存放新環境的文件夾並映射
使用指令【chrome.exe --remote-debugging-port=9222 --user-data-dir="E:\data_info\selenium_data"】
其中--remote-debugging-port是建立新的移植位置,其中端口后面會使用(自定義), --user-data-dir是數據存儲的目錄(自定義)

此時會打開一個網頁放着就行

2.selenium代碼接管
通過下面的代碼就可以登錄知乎

import time import json from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait class ZhiHu: def __init__(self): self.url = 'https://www.zhihu.com/' self.chrome_options = Options() self.chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")  # 前面設置的端口號
        self.browser = webdriver.Chrome(executable_path=r'E:\Environment\python_global\Scripts\chromedriver.exe', options=self.chrome_options)  # executable執行webdriver驅動的文件

    def get_start(self): self.browser.get(self.url) # time.sleep(20) # 可以選擇手動登錄或者是自動化,我這里登錄過就直接登陸了
        info = self.browser.get_cookies()  # 獲取cookies
        print(info) with open(r"..\download_txt\info.json", 'w', encoding='utf-8') as f: f.write(json.dumps(info)) if __name__ == '__main__': zhihu = ZhiHu() zhihu.get_start()


三、結果展示


四、總結
利用這個selenium接管正在使用的瀏覽器就可以繞過知乎的反爬,當然也可以做更多的爬蟲,selenium在爬蟲的使用中還是有重要的地位,偷懶一點就可以使用這個。這種方法可以獲取cookies這樣在使用其他的爬蟲,就可以使用這個cookies會加快爬取的效率,以及突破不適用瀏覽器的反爬措施。這引起我們另一個思考,我們直接接管我們正常的chrome好像更加的高效,這個可以以后的學習中嘗試一下。

五、參考
附一些參考,方便自己學習,畢竟每次百度起來都很麻煩
https://www.cnblogs.com/HJkoma/p/9936434.html
https://blog.csdn.net/qq_42206477/article/details/86477446

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM