V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tiRolin
V2EX  ›  Java

Java +Selenium 框架如何解决滑动验证码问题?

  •  
  •   tiRolin · 284 天前 · 1794 次点击
    这是一个创建于 284 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想实现这个网站的爬虫功能: https://www.cnhnb.com/hangqing/cdlist-0-0-0-0-0-1/?k=%E6%9F%91%E6%A9%98

    但是这个网站在爬取时会出现滑块验证码需要验证的问题,我检索工具中找答案,但是基本都是使用 Python 来解决的,我不怎么会把那里的 Python 代码转化到 Java 代码,用 GPT 也转不了(会出现各种预期之外的代码问题),还有一个方式是先获取原图像和滑块的缺口图像然后再对图像进行处理,但是我验证码的 HTML 代码里没有 src 我也不知道怎么通过什么下载出来,这招对我来说也不行

    各位想知道那个滑块验证码的具体样子只要进入我的网址多翻几页就可以看到了

    我真的什么办法都尝试过了,我真没办法所以我来问问各位,有懂的大佬能不能记一下,在下感激不尽啊

    12 条回复    2023-08-14 10:36:33 +08:00
    forQ
        1
    forQ  
       284 天前
    试试这个能不能避免出现滑块验证码 stealth.min.js
    htfy2020
        2
    htfy2020  
       284 天前
    你可以进入这个网页的触屏版,https://m.cnhnb.com/hangqing/cdlist-0-0-0-0-0-1/?k=%E6%9F%91%E6%A9%98 ,向下滑动会访问这个 API 获取数据 https://appapi.cnhnb.com/market-platform/api/market/statistics/pc/arealist ,你可以通过 Selenium 发送 API 请求,改变 pageNum 与 pageSize 参数即可。这样好像不会出现验证码
    yagamil
        3
    yagamil  
       284 天前
    滑块最简单的是使用图形比对的方式找缺口了。
    pzistart
        4
    pzistart  
       284 天前
    识图 api 网站,找图片到缺口的距离。调用工具包模拟操作鼠标滑动指定距离。
    mysunshinedreams
        5
    mysunshinedreams  
       284 天前
    之前我也做过类似的东西,采用的是 puppeteer ,然后模拟鼠标滑动,记住起始位置和结束位置,然后滑动滑块
    Ib3b
        6
    Ib3b  
       284 天前
    简单分析了下 js ,应该是用了一个通用的混淆,然后是 CryptoJS 加密,核心代码是这块
    ```javascript
    (CryptoJS[_0x2997('0xb7', 'S$@X')]['Utf' + '8'])
    , _0x48fa31 = new Date()[_0x2997('0x26d', '@B6g') + 'Tim' + 'e']()
    , _0x273bcf = CryptoJS[_0x2997('0x3b5', 'WTif')][_0x2997('0x32', 'PQm$') + _0x2997('0x1bf', 'L9ro') + 't'](String(_0x48fa31) + _0x47cf5e, _0x56ef51[_0x2997('0x48a', '75LK')], {
    'iv': _0x56ef51['iv'],
    'mode': _0x56ef51[_0x2997('0x49f', '8lh@') + 'e'],
    'padding': _0x56ef51[_0x2997('0x2d3', 'IXXq') + 'din' + 'g']
    })[_0x2997('0x373', 'V(jI') + _0x2997('0x3a3', '7leE') + 'ng']();
    _0x578069[_0x2997('0x3da', 'Actw') + 'x']({
    'headers': {
    'Time': _0x48fa31
    },
    'url': _0x2997('0x409', 'd6bo') + _0x2997('0x31', 'Fi#I') + _0x2997('0x2ab', 'cfM4') + _0x2997('0x404', 'akbu') + _0x2997('0x190', 'akbu') + 'ver' + _0x2997('0x1e0', '9lRr') + '/?c' + 'ode' + '=' + _0x273bcf,
    ```
    加密结果是_0x273bcf 这个变量。
    总结下整体难度不高,花点时间可以搞搞 js 反混淆,用协议方式请求。
    但我看即使过了这个验证后面也要求登录才能拿到数据,感觉没必要做
    c2const
        7
    c2const  
       284 天前
    跟语言关系不大,验证码问题,滑块得识图然后模拟操作就行了 :)
    滑块识图,复杂的需要付费接口、AI/人工识别;基本的自己做个图像二值化,然后找缺口的特征就可以了 :)
    模拟操作,可以调 js 模拟,也可以操作系统应用层的键鼠模拟 :)
    gg1025
        8
    gg1025  
       284 天前
    简单的拼图滑块可以用 opencv
    mmdsun
        9
    mmdsun  
       284 天前
    python 可以的 Java 肯定可以,Selenium 框架不区分语言的。
    把你找到的代码贴出来看看? 就是 Python 代码转化到 Java 代码失败的那个
    tiRolin
        10
    tiRolin  
    OP
       269 天前
    @c2const 我这里域间的问题是我没有办法将图片下载过来就是,我看了很多教程也是说的对图片进行处理,但是这个网址似乎给图片做了加密,导致我无法通过 HTML 下载到图片,没有图片后续的处理方式也是无从谈起,目前我遇上最大的问题就是这个,我不知道该怎么获取到滑块验证码的图片
    tiRolin
        11
    tiRolin  
    OP
       269 天前
    @Ib3b 大佬,能稍微指指路吗?你光说这些我不太明白,你的核心代码我在验证码的 HTML 上没找到,CryptoJS 加密的话那我是要对其进行解密然后来破解验证码吗?
    要不你告诉我该去使用什么技术或者给个学习网址或者关键词什么的,我自己去搜索学习,正好你也说难度不高,那或许我正好能解决不是
    Ib3b
        12
    Ib3b  
       258 天前
    @tiRolin 做爬虫的话可以,前端可以学习下 js ,后期学逆向、加密。针对这个 case ,你可以搜一下 sojson 反混淆
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1659 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:47 · PVG 00:47 · LAX 09:47 · JFK 12:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.