我想实现这个网站的爬虫功能: 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 我也不知道怎么通过什么下载出来,这招对我来说也不行
各位想知道那个滑块验证码的具体样子只要进入我的网址多翻几页就可以看到了
我真的什么办法都尝试过了,我真没办法所以我来问问各位,有懂的大佬能不能记一下,在下感激不尽啊
1
forQ 2023-07-19 13:48:19 +08:00
试试这个能不能避免出现滑块验证码 stealth.min.js
|
2
htfy2020 2023-07-19 14:30:04 +08:00
你可以进入这个网页的触屏版,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 参数即可。这样好像不会出现验证码
|
3
yagamil 2023-07-19 14:33:05 +08:00
滑块最简单的是使用图形比对的方式找缺口了。
|
4
pzistart 2023-07-19 16:09:49 +08:00
识图 api 网站,找图片到缺口的距离。调用工具包模拟操作鼠标滑动指定距离。
|
5
mysunshinedreams 2023-07-19 16:13:08 +08:00
之前我也做过类似的东西,采用的是 puppeteer ,然后模拟鼠标滑动,记住起始位置和结束位置,然后滑动滑块
|
6
Ib3b 2023-07-19 16:42:47 +08:00
简单分析了下 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 反混淆,用协议方式请求。 但我看即使过了这个验证后面也要求登录才能拿到数据,感觉没必要做 |
7
c2const 2023-07-19 16:55:10 +08:00
跟语言关系不大,验证码问题,滑块得识图然后模拟操作就行了 :)
滑块识图,复杂的需要付费接口、AI/人工识别;基本的自己做个图像二值化,然后找缺口的特征就可以了 :) 模拟操作,可以调 js 模拟,也可以操作系统应用层的键鼠模拟 :) |
8
gg1025 2023-07-19 17:02:04 +08:00
简单的拼图滑块可以用 opencv
|
9
mmdsun 2023-07-19 17:04:15 +08:00
python 可以的 Java 肯定可以,Selenium 框架不区分语言的。
把你找到的代码贴出来看看? 就是 Python 代码转化到 Java 代码失败的那个 |
10
tiRolin OP @c2const 我这里域间的问题是我没有办法将图片下载过来就是,我看了很多教程也是说的对图片进行处理,但是这个网址似乎给图片做了加密,导致我无法通过 HTML 下载到图片,没有图片后续的处理方式也是无从谈起,目前我遇上最大的问题就是这个,我不知道该怎么获取到滑块验证码的图片
|