python selenium反檢測(cè)問(wèn)題
python selenium反檢測(cè)
現(xiàn)在有大量的反爬機(jī)制,通常我們爬蟲(chóng)有re,bs4,selenium,這里重點(diǎn)說(shuō)selenium的。
之前有業(yè)務(wù)需求需要爬取boos直聘的信息,我們?cè)谑褂胹elenium進(jìn)行爬蟲(chóng)的時(shí)候,發(fā)現(xiàn)我們無(wú)法登陸進(jìn)去。
在這里我們通過(guò)js代碼發(fā)現(xiàn)他有個(gè)檢測(cè)機(jī)制
#通過(guò)查看window.navigator.webdriver信息可以看到這里是為true window.navigator.webdriver
因此我們需要修改我們的登陸信息
from selenium.webdriver import ChromeOptions option = ChromeOptions() # 實(shí)例化一個(gè)ChromeOptions對(duì)象 option.add_experimental_option('excludeSwitches', ['enable-automation']) # 以鍵值對(duì)的形式加入?yún)?shù) driver = webdriver.Chrome(chromedriver.exe',options=option)
在添加option實(shí)例之后我們打開(kāi)網(wǎng)頁(yè)輸入js代碼
window.navigator.webdriver 輸出undefined
這樣我們就可以避開(kāi)selenium的檢測(cè)機(jī)制。
python selenium+pyautogui,跳過(guò)網(wǎng)站對(duì)自動(dòng)化采集的檢測(cè)
操作方法
pyautogui.FAILSAFE =False # 自動(dòng) 防故障功能 pyautogui.PAUSE = 1 #停頓功能 print(pyautogui.size()) # 返回所用顯示器的分辨率; 輸出:Size(width=1920, height=1080) width,height = pyautogui.size() print(width,height) # 1920 1080 print(pyautogui.position()) # 得到當(dāng)前鼠標(biāo)位置; pyautogui.moveTo(100,300,duration=1) #移動(dòng)到指定位置 pyautogui.moveRel(100,500,duration=4) # 第一個(gè)參數(shù)是X軸,第二個(gè)是Y軸,duration滑動(dòng)速度 # 點(diǎn)擊鼠標(biāo) pyautogui.click(10,10) # 鼠標(biāo)點(diǎn)擊指定位置,默認(rèn)左鍵 pyautogui.click(10,10,button='left') # 單擊左鍵 pyautogui.click(1000,300,button='right') # 單擊右鍵 pyautogui.click(1000,300,button='middle') # 單擊中間 pyautogui.doubleClick(10,10) # 指定位置,雙擊左鍵 pyautogui.rightClick(10,10) # 指定位置,雙擊右鍵 pyautogui.middleClick(10,10) # 指定位置,雙擊中鍵 pyautogui.mouseDown() # 鼠標(biāo)按下 pyautogui.mouseUp() # 鼠標(biāo)釋放 pyautogui.dragTo(100,300,duration=1) #拖動(dòng)到指定位置 pyautogui.dragRel(100,500,duration=4) # 第一個(gè)參數(shù)是左右移動(dòng)像素值,第二個(gè)是上下, pyautogui.scroll(300) # 向上滾動(dòng)300個(gè)單位; #獲取屏幕截圖 im = pyautogui.screenshot() im.save('屏幕截圖.png') #識(shí)別圖像 btm = pyautogui.locateOnScreen('zan.png') print(btm) # Box(left=1280, top=344, width=22, height=22) # 圖像識(shí)別(多個(gè)) btm = pyautogui.locateAllOnScreen('zan.png') print(list(btm)) # [Box(left=1280, top=344, width=22, height=22), Box(left=25, top=594, width=22, height=22)] #鍵盤(pán)輸入 pyautogui.keyDown('shift') # 按下shift pyautogui.press('4') # 按下 4 pyautogui.keyUp('shift') # 釋放 shift #快捷鍵 pyautogui.hotkey('ctrl','c')
實(shí)例代碼
# 截圖進(jìn)行,找到位置 x,y = pyautogui.center(pyautogui.locateOnScreen('img_1.png')) pyautogui.moveTo(x,y, duration=1) pyautogui.mouseDown() pyautogui.dragTo(1250, random.choice([400,600]), duration=random.randint(1,3))
##如果是mac系統(tǒng)
img_point = pyautogui.locateCenterOnScreen("aj.png", confidence=0.8)
將像素調(diào)低,因?yàn)閳D片分辨率可能大于電腦。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django rstful登陸認(rèn)證并檢查session是否過(guò)期代碼實(shí)例
這篇文章主要介紹了Django rstful登陸認(rèn)證并檢查session是否過(guò)期代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08python多線程實(shí)現(xiàn)代碼(模擬銀行服務(wù)操作流程)
這篇文章主要介紹了python模擬銀行服務(wù)多線程實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01python二叉樹(shù)遍歷的實(shí)現(xiàn)方法
這篇文章主要介紹了python二叉樹(shù)遍歷的實(shí)現(xiàn)方法,使用了三種遍歷:先序遍歷,中序遍歷,后序遍歷,方法大家參考使用2013-11-11使用pyqt5搭建yolo3目標(biāo)識(shí)別界面的方法
這篇文章主要介紹了使用pyqt5搭建yolo3目標(biāo)識(shí)別界面的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python數(shù)據(jù)處理的26個(gè)Pandas實(shí)用技巧總結(jié)
這篇文章主要給大家分享一些pandas的實(shí)用技巧,共計(jì)26個(gè),這些技巧在你做數(shù)據(jù)處理中必不可少,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下2022-02-02