文章内容仅供参考学习,如有侵权请联系作者进行删除

实现过程:

1、通过node下载滑块的图片

2、通过python的cv2视觉识别图对图片进行定位位置

3、通过获取的位置再通过node的控制鼠标自动移动,已验证识别精准度为1/5左右

代码:

//nodejs
const puppeteer = require('puppeteer')
const request = require('request')
const fs = require('fs')
const execSync = require('child_process').execSync

async function run(){

let options={
        args: ['--no-sandbox'],
        headless: true,
    }
    //返回浏览器实例
    let browser=await puppeteer.launch(options);
    //创建新页面,并返回页面对象
    let page=await browser.newPage();

//进入指定页面
    await page.goto("https://www.douyin.com/hot");

await sleep(3000)

//下载滑块图片
    const backgroundSrc = await page.$eval('#captcha-verify-image', el => el.src);
    const slideSrc = await page.$eval('.captcha_verify_img_slide', el => el.src);
    await downloadImg(backgroundSrc, "./python/background.jpeg")
    await downloadImg(slideSrc, "./python/slide.png")

//识别移动位置
    await sleep(2000)

//p.py文件则是下面python代码
    const output = execSync('python python/p.py'); 
    let moveSize = parseInt(output.toString());

//cv2视觉机器学习
    if(moveSize > 200){
        moveSize = moveSize-65;
    }else if(moveSize > 150){
        moveSize = moveSize-25;
    }else if(moveSize <= 70){
        moveSize = moveSize+30;
    }else if(moveSize < 100){
        moveSize = moveSize+10;
    }else if(moveSize < 134){
        moveSize = moveSize+30;
    }
    //console.log(moveSize)

//开始滑动
    const element = await page.$('#secsdk-captcha-drag-wrapper>div:nth-child(2)');
    const size = await element.boundingBox();
    await page.mouse.move(size.x, size.y);//鼠标移动到滑块的的位置上方
    await page.mouse.down();//按下鼠标
    await page.mouse.move(size.x+moveSize+20, size.y, {steps:200});//鼠标向右移动滑块,y坐标不变,x坐标取值1000
    await page.mouse.up();//松开鼠标

//获取cookie
    await sleep(3000)
    await page.setContent("<script>...</script>")
    let cookie = await page.evaluate(() => document.cookie);

//此处则拿到能正常请求的cookie,END
    console.log('cookie: '+cookie);
    browser.close();

}

async function downloadImg(src, path) {
  return new Promise(async function (resolve, reject) {
    let writeStream = fs.createWriteStream(path);
    let readStream = await request(src);
    await readStream.pipe(writeStream);
    readStream.on("end", function () {
    });
    readStream.on("error", function () {
    });
    writeStream.on("finish", function () {
      writeStream.end();
      resolve();
    });
  });
}

function sleep(ms){
    return new Promise(resolve=>{
        setTimeout(resolve,ms)
    })
}

run();

---------------------------------------------------------------------------------------------------------------------------------

//python
# coding=UTF-8

import cv2
import sys

def show(name):
    # 展示圈出来的位置
    cv2.imshow('Show', name)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

def _tran_canny(image):
    # 消除噪声
    image = cv2.GaussianBlur(image, (3, 3), 0)
    return cv2.Canny(image, 50, 150)

def detect_displacement(img_slider_path, image_background_path):
    # detect displacement
    # # 参数0是灰度模式
    image = cv2.imread(img_slider_path, 0)
    template = cv2.imread(image_background_path, 0)

# 寻找最佳匹配
    res = cv2.matchTemplate(_tran_canny(image), _tran_canny(template), cv2.TM_CCOEFF_NORMED)
    # 最小值,最大值,并得到最小值, 最大值的索引
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

top_left = max_loc[0]  # 横坐标
    # 展示圈出来的区域
    x, y = max_loc  # 获取x,y位置坐标

w, h = image.shape[::-1]  # 宽高
    cv2.rectangle(template, (x, y), (x + w, y + h), (7, 249, 151), 2)
    #show(template)
    return top_left-w

if __name__ == '__main__':
    top_left = detect_displacement(sys.path[0]+"/slide.png", sys.path[0]+"/background.jpeg")
    print(top_left)

抖音web爬虫【滑块验证码解决方法】相关推荐

  1. 抖音修改东西一直显示服务器升级,抖音提示服务器维护怎么办?抖音提示服务器维护的解决方法...

    抖音提示服务器维护怎么办?最近大家在刷抖音的时候有没有遇到抖音服务器正在维护中的字样,很多小伙伴都不知道发生了什么,要怎么解决正在维护的情况,下面就给大家分享抖音提示服务器维护的解决方法. 解决方法 ...

  2. 看抖音快手时显示无法进入服务器,手机突然无法进入抖音直播怎么回事?解决进不去抖音直播的方法...

    我们在抖音中看到了不少人直播,有的是好看的小姐姐,有的是帅气的小哥哥,但是我们总是会遇见各种各样的问题,有的时候我们进不去直播间,这是为什么呢?接下来小编带你们走进抖音直播进不了解决方法. [抖音直播 ...

  3. python爬虫中文乱码解决方法

    python爬虫中文乱码解决方法 参考文章: (1)python爬虫中文乱码解决方法 (2)https://www.cnblogs.com/surecheun/p/9694052.html 备忘一下.

  4. 2022最新whatsapp接收不到验证码解决方法

    2022最新whatsapp接收不到验证码解决方法 以下内容是背景,可直接跳过,正文从第二段开始 最近因为有了一个新手机卡,所以就想好好利用一下,把全套的SNS社媒都弄一下,包括Facebook, L ...

  5. python爬虫 403 Forbidden 解决方法

    python爬虫 403 Forbidden 解决方法 参考文章: (1)python爬虫 403 Forbidden 解决方法 (2)https://www.cnblogs.com/tian-sun ...

  6. 抖音上免费涨粉的方法,制作出一个爆款视频!

    要说抖音上免费涨粉的方法,莫过于制作出一个爆款视频了. 2018年, 抖音怎么免费涨粉最值得拿来一说的案例就是"成都小甜甜",一夜暴涨500万粉丝,而且都是免费的.这是微博.微信等 ...

  7. 抖音短视频SEO优化排名方法

    抖音短视频与搜索引擎一样,都有一个推荐排名规则.同样的内容,有的推荐热门,有的没流量,那么抖音的排名推荐规则是什么样的了?抖音官方是有介绍的,起点源码分享给大家看看. 1.账号优化 1)账号定位:账号 ...

  8. 抖音web端私信websocket-protobuf 浅学

    最近抖音web端私信功能出来了,好学的我赶紧去学习了一波,他和我前面抖店私信的写法差不多. 该文章写的比较水,不会写的很详细,主要是给大家提供思路少走弯路,望各位大佬见谅,懂得多懂. 一个账号大概一天 ...

  9. 抖音涨粉丝最快的方法

    抖音涨粉丝最快的方法/抖音涨粉/抖音赚钱/抖音运营/抖音代运营 当你认真做好了视频后,抖粑会给你一定的流量,500以内的播放量卡住了很大一部分人,如果视频不错可能播放量会卡几千,但是涨的粉丝屈指可数, ...

最新文章

  1. 深入 Nginx 之架构篇
  2. MySQl笔记8:把good表中商品名为‘诺基亚xxxx‘的商品,改为‘HTCxxxx‘
  3. 云原生实时数仓首次在2020双11核心数据场景落地
  4. python基础===字符串的制表,换行基础操作
  5. 如何将 Apple Watch 用作闹钟?
  6. 博弈论与最优化的关系
  7. php二级垂直导航栏,垂直(纵向)二级导航菜单
  8. python中counter怎么用_带你走进python 计数器类Counter的用法
  9. Paper再现:MD+AI自动编码机探测蛋白变构(四):DIO的生成和聚类
  10. zz]Prisoners’ Dilemma Tit For Tat
  11. 计算机模糊,电脑显示不清晰_如果计算机显示器模糊或不清楚,该怎么办
  12. LBS学习相关网址(Jonathan Raper教授整理)
  13. 北航计算机在职研究生多少钱,在职攻读北航研究生需要多少学费?
  14. 超越函数/微分方程 /积分中的技术/级数
  15. html/css/javascript-编辑器
  16. AUTOSAR SWS Service Discovery
  17. 【转载】CRC32校验算法C语言版(查表法)
  18. 记录Windows下有趣的cmd命令(持续更新)
  19. kivy配置Buildozer
  20. PCB设计焊盘设计标准

热门文章

  1. CTPAT认证辅导,外国制造商必须确保商业伙伴遵照C-TPAT安全标准制定安全程序和规程
  2. halcon脚本-电池正反检测【附源码】
  3. 太好了!好多好多偏方
  4. 华为2016校园招聘上机笔试题
  5. FS2712C筋膜枪单片机方案MCU方案原理图
  6. 移动硬盘插笔记本上不显示盘符,并灯光闪烁发出咯吱声,设备管理器中可见,别的机器上可以正常使用
  7. 软件需求分析案列_软件需求分析(案例答案)
  8. 软件测试代码表,软件测试函数列表功能图程序源代码
  9. IBM智慧的云计算——白皮书、行业解决方案资料集
  10. TeXstudio的NOMENCLATURE