在爬虫开发过程中,经常会遇到验证码的情况,这是反爬过程中相当有门槛的措施,破解成本非常高,需要深度学习、JS 逆向等相关的经验,而且成功率还不一定很高。即使破解成功,如果目标网站换了验证码生成的方法或算法,那么费了九牛二虎之力才成功破解的工作将前功尽弃。因此,破解验证码这种反人类的事情,真的不适合新手。
那么,用什么方法才能够避免验证码,从而完成登录呢?如果一个方法不行( Not working ),我们不要死磕( Stick to it ),我们可以尝试采用绕开的方式( Workaround )。而本文将介绍一种简单可行的绕开验证码的办法,并且实践证明是非常有效的。目前关于这种方法的网上资料并不多,本文将简单介绍一下,权当抛砖引玉。
文章链接: 地址
1
rekulas 2020-02-08 14:16:07 +08:00 43
你抛出的问题:
用什么方法才能够避免验证码,从而完成登录呢 你提出的解决方案: 输入验证码登录后,拿到登录后的 cookie,绕过登录验证 大哥你真的不是在忽悠小白吗 |
2
1018ji 2020-02-08 14:22:47 +08:00 via Android
这非常(没)有用
|
5
also24 2020-02-08 15:02:20 +08:00
一脸懵逼的看完整篇文章…………
|
6
finely 2020-02-08 15:19:44 +08:00 48
对于疫情,防止买不到口罩的好办法:
提前买好口罩,届时拿出来用 |
7
kidult 2020-02-08 15:42:15 +08:00 1
对于避免每次回家都要拿出钥匙开门的好办法:
提前让家里人把门开好,这样可以直接进,不用找半天钥匙 |
8
mara1 2020-02-08 15:50:43 +08:00
题主,我要是加密一下存 session 呢?
|
10
lhx2008 2020-02-08 15:55:30 +08:00 via Android 1
行了,就是人工输入验证码呗,讲的这么神秘
|
11
iyaozhen 2020-02-08 15:58:22 +08:00
我破解验证码就是为了 cookie,你给我说可以先拿 cookie 就不用验证码了 这不是逗嘛
|
12
qiushaox 2020-02-08 15:59:03 +08:00 via iPhone
虽然大家都在笑楼主,但我之前做的一个爬虫系统,就是用的这种思想。对于没精力去搞破解验证码的同学还是挺有用的嘛
|
13
idemaker 2020-02-08 16:01:38 +08:00
作者真是闲的,小白的东西,,这个只能帮助小白了解简单的爬虫流程,现在每个大型网站都有 token 认证,token 这个到期之后的问题呢!
|
14
jugelizi 2020-02-08 16:02:47 +08:00
.。。人工大妈了解下
|
15
locoz 2020-02-08 16:15:00 +08:00 via Android 1
@rekulas @1018ji @also24 @finely @kidult @lhx2008 @iyaozhen @idemaker
😂其实说白了就是用插件取 cookie 给爬虫使用,虽然是个很简单粗暴的办法,但是楼上有些朋友可能没想到把这个办法扩展开的用途,比如说: 有些网站 / app 的登录操作可能搞起来很麻烦 / 涉及到很复杂的风控 / 涉及到高难度验证码 / 需要高真人度的账号,并且 session 可能会要更新,更新时又会涉及到前面那一堆麻烦事,而你可能只需要少量账号就能做完你所要做的事情。 那这种情况下完全可以直接忽略掉登录步骤,通过浏览器插件 / 写一个基于 xposed 之类的 hook 框架的 app,很自然地就把 session 给取了,并且不用担心账号的真人度太低而触发风控、出现验证码或假数据的问题。 --- 据我所知有些公司搞淘宝、美团之类的就是这么搞的,一点压力都没有。方法虽然简单,但并不是没用,甚至可以说非常有用。 实际上确实挺多人并不会想到这种方法,我在爬虫群里看见过很多碰到我前面说的那种情况但只会硬怼的。 |
17
pcbl 2020-02-08 16:26:14 +08:00 via Android 2
登录验证码从来不是障碍,麻烦的风险请求导致的验证码
|
18
axwz88 2020-02-08 16:29:28 +08:00 via Android
直接用 cookie 登陆只能针对某些网站和某些场景,的确是小白操作,不过有一说一也是最实用的姿势,只是能用这个方法的网站不多
|
19
falcon05 2020-02-08 16:31:25 +08:00 via iPhone
v2ex 的每日签到我就是这样“绕过”的,的确没啥技术含量,而且还要处理 cookie 过期的问题。
|
21
515576745 2020-02-08 16:36:24 +08:00 via Android
小白都会的方法? cookie browser 就是这样的
|
22
LevineChen 2020-02-08 17:24:28 +08:00
早些年确实流行这种攻击方式, 现在不清楚有这种漏洞的网站还多不多了.
|
23
matsuijurina 2020-02-08 17:40:17 +08:00 via iPhone
本来以为是某个打码公司的软文,没想到楼主竟如此可爱
|
24
a852695 2020-02-08 17:45:19 +08:00
楼主在无聊的在家时光给了我巨大的快乐。
|
25
zhw2590582 2020-02-08 17:46:29 +08:00 via iPhone
不用点开文章看了,其实这个方法可以浓缩成 100 字以内,小白都能看懂。
|
26
springGun 2020-02-08 17:59:32 +08:00
@locoz 原来是知乎的爬虫大佬,通过 app 抓包获取的 session 不会被风控识别吗? 如果抓取到假数据你是怎么区分的? 人工筛选吗?
|
27
locoz 2020-02-08 18:08:45 +08:00
@springGun #26 不是大佬,菜鸡一个。
我说的这种方式,取到的 session 是你手机上日常使用的帐号的 session,只要后续的请求参数啥的都没问题就不会有啥问题,毕竟你的日常操作已经把对方风控的真人度分值给拉高了。 假数据一般可以先用随机抽出部分数据人工比对的方式判断是否正常,如果正常了的话后续就可以程序自己判断了。比如说商品价格之类的,有一种很常见的方式就是与之前价格的平均值做比较,如果大范围出现差异过大的情况就可以判定为被喂假数据了。 |
28
locoz 2020-02-08 18:12:22 +08:00
@zhw2590582 #25 缩到 100 字以内小白还真看不懂😂大部分小白由于知识面还没扩开的关系,会不知道具体该怎么做。
|
30
kisshere 2020-02-08 18:42:51 +08:00
这项目我王多鱼投了!
|
31
tikazyq OP 一回来看到这么多评论,而且很多都是比较倾向于这种办法过于简单,不足挂齿的。这里我简单说明一下。
我写这篇文章的目的,不是为了把一个很简单的东西说得有多么高大上,而是将一个我的实际的产品例子拿来分享。这里再安利一下用到了这个技术的 Github 项目 ArtiPub,用的人也不是非常多,现在也只有 1.6k Github Stars,但在实战中确实有效,方法非常简单,而且竞争对手 OpenWrite 也是用这种方式来绕开登录的。其中所有平台 掘金、SF、v2ex、CSDN、开源中国、博客园、知乎、今日头条,都被这种方法绕开了,都是用 Cookie 的方式!不知道有不有相关的大佬会看到这篇文章回去升级登录验证方式的,例如用 JWT。 https://github.com/crawlab-team/artipub 我看了一下数据,文章阅读量到目前只有 65 个,也就是说 1.3k 从 v2 点进来的人,有多少人是真正看了文章而评论的呢?如果只是为了娱乐,我可以当然一笑了之,如果是被没看懂的大佬们误导,就有点得不偿失了。 |
33
tikazyq OP @zhw2590582 请尝试小学生写作试试
|
34
tikazyq OP @matsuijurina 可爱在哪一点?;)
|
35
t6attack 2020-02-08 18:56:19 +08:00
我自己攒的所有爬虫,凡是需要登录的,都是手动登录拿的 cookie。然后把拿到的 cookie 嵌入项目。这和验证码无关,只是觉得写“自动登录”多此一举。
我也是第一次听说,这是绕过验证码的手段?! 人家验证码是防这个的嘛? 注册验证码 防的是 注册机、登录验证码 防的是 密码暴破,谁防你登录后采集啦? |
37
ipwx 2020-02-08 19:11:19 +08:00
@tikazyq 你也不要光顾着嘲笑楼下嘲笑你的列位。这里问题的核心在于,有没有维护爬虫运行“运营成本”。
你如果一个公司,可以雇人专门手输验证码,Okay 这不是问题。但是楼下多少人是给公司做项目要输验证码的?很多个人项目之所以写爬虫,不就是为了付出一点开发成本(程序员个人的空闲时间),换取之后完全零运营成本么?所以绕过验证码对于这些场景是不可容忍的。 至于你说验证码太难,没法攻破怎么办?很简单,不写程序了,退回人肉操作。连爬虫都不写了,反正是个人项目嘛。 |
39
tikazyq OP @ipwx 这里的运营成本我理解的是管理爬虫的维护成本。如果是暴力破解验证码,算法一换立马凉凉。相反,如果是采用绕开的方式就可以有效绕开登录,何乐而不为呢,我觉得这是目前为止最简单花费最小的方式。咱们程序员都懒人,既然这样,为什么要亲自造火箭呢?
|
41
locoz 2020-02-08 19:53:25 +08:00
@ipwx #37 这种操作本质上是“人工登录”而不是“人工打码”,区别挺大的。“人工登录”其实也没有啥运营成本,日常使用时自然而然地就把 session 有效期给刷新了。而大部分网站 /APP 只处于登录状态,不很高频的操作的话是不会在后续出现验证码的。
公司项目方面我在#15 举的例子可以看看; 个人项目的话,使用这种操作实际上比写自动登录更省时省心,毕竟自动登录实际上还会碰到页面改版、更换验证码、添加校验参数、偷偷对使用低版本接口登录的帐号降权等各种问题。而登录一出岔子后面的操作很可能就全都报废了,跟着更新花的时间根据难度的不同,花个十几二十分钟甚至几天都有可能,但“人工登录”几十秒就能解决问题。 |
43
kenvix 2020-02-08 21:00:37 +08:00
?但凡写爬虫需要写登录处理验证码的,都是您老这种方法完全不能用的情况
|
44
AX5N 2020-02-08 21:03:17 +08:00
这个技术极其简单,也许有用,但你写的废话太多。就不能抓住重点,几句话说完么。
|
45
jziwenchen 2020-02-08 21:05:09 +08:00
没试试对接打码平台 API ?
|
46
whoami9894 2020-02-08 21:09:00 +08:00 via Android
@tikazyq #31
> 不知道有不有相关的大佬会看到这篇文章回去升级登录验证方式的,例如用 JWT 建议先搞清楚 jwt 是什么。 而且,用这种方式绕过登录并不代表网站的验证方式有问题,和浏览器正常访问完全相同的 HTTP 报文服务器怎么区分? (不考虑请求频率 你说的这种方式确实有用,比如我不想花时间破解验证码,只想用程序批量获取登录后数据时。但你煞有介事的发个帖,给我的感觉就是半瓶子晃荡 |
47
tikazyq OP @whoami9894 对这种评论我也只有 no comment 😷
|
49
tikazyq OP @jziwenchen 确实打码平台是一种办法
|
50
mengminggo 2020-02-08 21:35:44 +08:00 via Android
薛定谔的 cookie
|
53
ooops 2020-02-08 21:44:59 +08:00 2
教程发错地方了,这里不是你文章的受众。标题也起的确实不合适,我承认我是被骗进来的
|
54
yoshiyuki 2020-02-08 21:45:30 +08:00 1
确实可行,是一种半手动介入,降级完成爬虫的方法
诸君嘲讽大可不必,楼主表述有一定不准确的地方,只表达“绕过”验证码,但是没有在标题、摘要等地方明确指出是人工操作、自动化程度降低的。 |
55
tabris17 2020-02-08 21:46:26 +08:00
问:如何绕过“全自动区分计算机和人类的公开图灵测试”(CAPTCHA)?
答:雇个人手动去验证嘛 |
56
locoz 2020-02-08 21:52:15 +08:00 1
|
58
locoz 2020-02-08 21:55:47 +08:00
@jziwenchen #45 打码平台只能解决验证码,对于加密参数难搞 / 风控严格的情况没用的。(实际上很多不会逆向或者逆向水平比较差的人碰到的主要问题不是验证码而是后两个
|
60
murmur 2020-02-08 21:56:54 +08:00
cookie 也会出问题的,在大概不知道多少年前我们就用 cookie 抓新浪微博,然而每天都有无数的账号触发手机验证
真当反扒是吃素的啊 |
63
yankebupt 2020-02-08 22:03:13 +08:00 1
表示落伍太久了
现在的 app 已经是新版一出旧版 cookie/session 寿命立刻削成渣,逼你换新 app 版本了,不玩爬虫的手动低频用户还不容易看出来,无止尽的怼版本真的有耐心么。 |
65
areless 2020-02-08 23:12:40 +08:00 via Android
~~~十几年前火车头采集啊论坛群发啊都抓验证码让你手动输入的。后来 rss 了,多如牛毛的新闻没啥用了,爬 rss 几天时间居然爬了 300 多 g,本来爬着做 seo~~~但搜索引擎也不傻。
|
66
qqpkat2 2020-02-09 00:17:07 +08:00
你跟客户去说让他手动输入 cookie 看看
|
67
mgoann 2020-02-09 03:34:50 +08:00 via Android
一个 httpOnly 你的实现就瘫了
|
68
killerv 2020-02-09 12:08:11 +08:00
楼主说的这个是有场景的,比如登录一个账号就能抓取所有信息,并不需要登录很多账号,比如我需要登录才能抓取链家的房产信息。可能描述有问题吧。
----------- 但是这本来就是一句话就说完的,还说那么多,放个链接…… |
69
linvaux 2020-02-09 12:55:38 +08:00
对接打码平台不就好了
|
70
Tompes 2020-02-09 13:27:42 +08:00
哈哈哈哈哈哈哈哈,不行了 我要笑死了
|
73
phobal 2020-02-09 15:18:06 +08:00 1
做成浏览器插件,然后通过插件去取 cookie,还是存在人工操作的步骤,不够自动化,可以尝试使用 puppeteer 去做自动登录,登录成功以后将 cookie 拿到(有现成的 API ),再做后续的操作,这样做的好处有 2 点:
1. 可以去除手动操作,全程自动化; 2. 确保每次的 cookie 都是有效的。 |
76
celeron533 2020-02-09 22:38:35 +08:00
标题有些误导。这不叫绕开验证码,只是一直在重用 cookies。早些年有的比价插件直接用用户的 cookies 来爬。
|