新闻动态

识别搜狗验证码成功登录进行反反爬教程

2022-05-07

今日学习了一下抓取sou狗搜索网站的关键排名情况,在频繁请求页面并获取网站的排名时,爬虫ip被封禁,需要手动输入验证码才能解禁。

识别sou狗验证码成功登录进行反反爬

 

对于这样的验证码处理,还是比较简单的,首先就时调用浏览器,获取这个页面,然后对验证码图片进行切割保存。

一、登录

用selenium打开页面信息,屏蔽webdriver的信息

识别sou狗验证码成功登录进行反反爬

 

二、截取验证码

将浏览器保存为图片,定位出验证码的坐标位置,进行切割保存

def open_sougou():
    driver.get(url)
    driverWait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'img#seccodeImage')))


def get_screen_shot():
    screen = driver.get_screenshot_as_png()
    screen_shot = Image.open(BytesIO(screen))
    return screen_shot

def get_captha_position():
    element = driver.find_element_by_css_selector("img#seccodeImage")
    location = element.location
    size = element.size
    left,top,right,bottom = location['x'],location['y'],location['x'] + size['width'],location['y'] + size['height']
    return left,top,right,bottom

def get_captha_shot(name='ca.png'):

    driver.execute_script("document.body.style.zoom=0.8")
    screen_shot = get_screen_shot()
    left,top,right,bottom = get_captha_position()
    captha_shot = screen_shot.crop((left,top,right,bottom))
    captha_shot.save(name)

 

识别sou狗验证码成功登录进行反反爬

 

三、联众接口识别

这里用第三方接口识别验证码

识别sou狗验证码成功登录进行反反爬

 

四、灰度处理图片

用opencv库对图片进行灰度处理,调用联众接口方法,获取验证码

def handle_img():
    yzm = cv2.imread('ca.png')
    yzm = cv2.cvtColor(yzm,cv2.COLOR_BGR2GRAY)
    # thresh, yzm = cv2.threshold(yzm, 160, 255, cv2.THRESH_BINARY)
    cv2.imwrite('ca2.png',yzm)

def get_imgcode():
    code = lianzhong()
    print(code)
    return code

五、验证

拿到返回的验证码信息,进行页面输入

def send_code(code):
    driver.execute_script("document.body.style.zoom=1")
    driver.find_element_by_css_selector("input[type='text']").send_keys(code)
    time.sleep(1)
    driver.find_element_by_xpath("//a[@id='submit']").click()
    time.sleep(1)
    driver.find_element_by_css_selector("a[onclick='changeImg2();']").click()

六、运行

识别sou狗验证码成功登录进行反反爬

 

运行主函数后,成功验证成功,并返回搜狗正常页面

在线充值在线咨询在线电话返回顶部

技术支持

电话咨询

19922193247

超10000+ 企业选择我们,快速体验!

温馨提示:我们将在您提交信息后的30分钟内与您取得联系,请您保持电话通畅,谢谢!