python selenium反检测问题
作者:一只上班爱摸鱼的小菜鸡
这篇文章主要介绍了python selenium反检测问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
python selenium反检测
现在有大量的反爬机制,通常我们爬虫有re,bs4,selenium,这里重点说selenium的。
之前有业务需求需要爬取boos直聘的信息,我们在使用selenium进行爬虫的时候,发现我们无法登陆进去。
在这里我们通过js代码发现他有个检测机制
#通过查看window.navigator.webdriver信息可以看到这里是为true window.navigator.webdriver
因此我们需要修改我们的登陆信息
from selenium.webdriver import ChromeOptions option = ChromeOptions() # 实例化一个ChromeOptions对象 option.add_experimental_option('excludeSwitches', ['enable-automation']) # 以键值对的形式加入参数 driver = webdriver.Chrome(chromedriver.exe',options=option)
在添加option实例之后我们打开网页输入js代码
window.navigator.webdriver 输出undefined
这样我们就可以避开selenium的检测机制。
python selenium+pyautogui,跳过网站对自动化采集的检测
操作方法
pyautogui.FAILSAFE =False # 自动 防故障功能 pyautogui.PAUSE = 1 #停顿功能 print(pyautogui.size()) # 返回所用显示器的分辨率; 输出:Size(width=1920, height=1080) width,height = pyautogui.size() print(width,height) # 1920 1080 print(pyautogui.position()) # 得到当前鼠标位置; pyautogui.moveTo(100,300,duration=1) #移动到指定位置 pyautogui.moveRel(100,500,duration=4) # 第一个参数是X轴,第二个是Y轴,duration滑动速度 # 点击鼠标 pyautogui.click(10,10) # 鼠标点击指定位置,默认左键 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() # 鼠标按下 pyautogui.mouseUp() # 鼠标释放 pyautogui.dragTo(100,300,duration=1) #拖动到指定位置 pyautogui.dragRel(100,500,duration=4) # 第一个参数是左右移动像素值,第二个是上下, pyautogui.scroll(300) # 向上滚动300个单位; #获取屏幕截图 im = pyautogui.screenshot() im.save('屏幕截图.png') #识别图像 btm = pyautogui.locateOnScreen('zan.png') print(btm) # Box(left=1280, top=344, width=22, height=22) # 图像识别(多个) 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)] #键盘输入 pyautogui.keyDown('shift') # 按下shift pyautogui.press('4') # 按下 4 pyautogui.keyUp('shift') # 释放 shift #快捷键 pyautogui.hotkey('ctrl','c')
实例代码
# 截图进行,找到位置 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系统
img_point = pyautogui.locateCenterOnScreen("aj.png", confidence=0.8)
将像素调低,因为图片分辨率可能大于电脑。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。