解決selenium + chromedriver被知乎反爬的問題

寫在前面

前兩天想爬知乎,發現用selenium模擬登錄時出現了問題——點擊登錄按鈕沒反應。。。
無論是用webdirver模擬點擊,還是自己手動點擊,都無法跳轉到首頁。
後來發現大概是知乎識別出selenium了。把我們給反爬了。

解決辦法

解決辦法就是——用webdirver接管我們自己打開的瀏覽器,然後再進行登錄操作。

具體的接管方法,這篇文章已經說得非常清楚了:https://www.cnblogs.com/HJkoma/p/9936434.html

具體步驟

在環境變量中PATH裏將chrome的路徑添加進去:
  1. 打開控制面板,點擊“高級系統設置”
    在這裏插入圖片描述
  2. 進入系統屬性,點擊下方“環境變量”
    在這裏插入圖片描述
  3. 找到Path,點擊“編輯”
    在這裏插入圖片描述
  4. 在變量值中添加配置路徑 C:\Program Files (x86)\Google\Chrome\Application(注意要與前面的路徑用分號隔開)
    在這裏插入圖片描述
  5. 一路點“確定”就ok了


在cmd中運行命令:
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"

在這裏插入圖片描述
這時,會打開一個瀏覽器。
然後我們回到pycharm,運行模擬登錄知乎的代碼:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os


chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
browser = webdriver.Chrome(executable_path = 'D:\Documents\Downloads\chromedriver_win32\chromedriver.exe', options=chrome_options)

browser.get("https://www.zhihu.com/signin")
browser.find_element_by_css_selector(".SignFlow-accountInput.Input-wrapper input").send_keys("用戶名")
import time
time.sleep(3)
browser.find_element_by_css_selector(".SignFlow-password input").send_keys("密碼")
browser.find_element_by_css_selector(
    ".Button.SignFlow-submitButton").click()

發現登錄成功了!
登錄異常次數多了,就會出現驗證碼。關於知乎的驗證碼破解歡移步我的這篇博文(還沒寫好)

結語

這個方法比較笨
但是我目前還沒找到別的解決辦法
歡迎大家提供其他的解決辦法~


2019/1/17
今天在網上看到一個思路:http://www.site-digger.com/html/articles/20180821/653.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章