国家企业信用信息公示系统验证码破解(三)

前期工作已经准备好,下面我们开始核心函数的编写。

滑动验证码

由于该网站前段时间更新了滑动验证码的背景图片,以及打码平台要求的滑动验证码形式是包含背景图片以及缺口图片在内的一张完整图片,我们这边采用对相应区域进行截图的形式来完成。截图直接使用设计器中的截图组件,对滑动验证码所在的位置进行截图后,生成的代码如下:
国家企业信用信息公示系统验证码破解(三)

将生成的图片作为参数传递给打码平台,获取到返回的位置坐标后调用 pyautogui 的减速运动将其拖拽至目标位置,完整函数如下:

def huadong():
    imgpath = iimg.capture_image(win_title=r'国家企业信用信息公示系统 - Google Chrome',win_text=r'',left_indent=792,top_indent=424,width=317,height=193,waitfor=30)
    location = Supermandama.run_supermandama(imgpath)['result']
    print('location:',location)
    if type(location) == str:
        location = location.split(';')
    if location.count('') == 1:
        del location[-1]
    pyautogui.moveTo(840, 630)
    pyautogui.dragTo(807+int(location[0].split(',')[0]), 640, 1, pyautogui.easeOutQuad)

最后两行代码分别是鼠标先从当前位置移动到起始位置,然后减速拖拽至目标位置,可以有效地模拟人的操作,防止反爬。

点击验证码

依然采用截图的形式,截图区域类似下面这样
国家企业信用信息公示系统验证码破解(三)

完整函数如下:

def dianji():
    imgpath = iimg.capture_image(win_title=r'国家企业信用信息公示系统 - Google Chrome',win_text=r'',left_indent=756,top_indent=337,width=388,height=442,waitfor=30)
    location = Supermandama.run_supermandama(imgpath)['result']
    print('location:',location)
    if type(location) == str:
        location = location.split(';')
    if location.count('') == 1:
        del location[-1]
    for point in location:
        if point: 
            pyautogui.moveTo(750+int(point.split(',')[0]),330+int(point.split(',')[1]), duration=1)
            pyautogui.click(750+int(point.split(',')[0]),330+int(point.split(',')[1]))
    pyautogui.moveTo(780+304,410+378, duration=1)
    pyautogui.click(780+304,410+378)

最后两行表示移动到确认按钮所在的位置并进行点击,同样是为了防止反爬。

注意

  1. 具体的坐标位置需要根据自己电脑的实际情况进行微调
  2. Supermandama 在http://support.i-search.com.cn/article/1552830841065 中已经给出,其中账号密码需要自己注册,调用时将 Supermandama.py 放在项目文件夹中的 codes 文件夹中,然后在代码块中导入import Supermandama即可
  3. 代码块中还需导入截图相关的库import ubpa.iimg as iimg