淘宝反爬求解

2019-01-17 11:53:16 +08:00
 frogex
爬虫新人,主要要爬淘宝一些搜索结果和商品的销量。
参考的帖子非常多:
https://intoli.com/blog/making-chrome-headless-undetectable/
https://antoinevastel.com/bot%20detection/2018/01/17/detect-chrome-headless-v2.html

目前已经做的事情:
1.mitmdump 挂脚本,拦截 js ( sufei_data/3.6.8/index.js )替换其中一些检测,比如知名的 f.webdriver,$cdc_asdjflasutopfhvcZLmcfl_
2.mitmdump 在页面 load 时设置了 navigator.language(注意,不是 languages,淘宝的 index.js 检测的没有复数),navigator.webdriver,window.chrome,window.navigator.permissions.query 属性
3.分析了 index.js ,测试了可能鉴定爬虫的特征代码( L = [r, i, a, e, l],B = [m, h, v, d, g];),这几个函数返回值 headless 和非 headless 下都是一致的

结果:
非 headless 下自动登陆大概率(90%)能通过,headless 下似乎一次都过不了。所以这下就郁闷了,不明白究竟是哪里遗漏了呢? headless 和非 headless 还有什么特征不同吗?
13892 次点击
所在节点    Python
72 条回复
frogex
2019-01-17 15:15:24 +08:00
@ioven app 的逆向就要破协议了,这个我更加没经验,有什么方法吗
5200
2019-01-17 15:23:22 +08:00
@frogex 你目前是使用什么方式的呢,
我之前也尝试过很多种工具和语言方法,
有些工具就连登录都过不了,
淘宝里面的检测方法多得很,
也没精力去一个一个研究,
最后就使用脚本类,模拟键盘鼠标,
这个网页端肯定是检测不到的,
目前稳定运行了半年多了。
frogex
2019-01-17 15:50:24 +08:00
@5200
你这个用按键精灵?感觉更不好稳定吧,如果位置什么的有偏差就做不了啊
我目前是
1.selenium + chrome headless, 爬列表页面,价格等数据有小几率获取,获取不到的记录-1。
2.另外启 selenium + chrome noheadless,随机获取-1 的数据循环重新请求价格,销量。
3.cookie 每天更换一次,chrome noheadless,每天早上 9 点爬虫会更新 cookie,时间不对(不是当天的 cookie )就手动扫码获取 cookie

如果 1 爬完了,2 这里还有大量的-1 记录,我就有点慌了,会不停的手工获取 x5sec 的数据直接抓接口了
murmur
2019-01-17 15:50:59 +08:00
淘宝的代码里会检查 webdriver 的标志 需要重新编译改变量名
frogex
2019-01-17 15:56:12 +08:00
@murmur
这些在问题里都提到了,都做过了啊
farverfull
2019-01-17 16:44:16 +08:00
我也在其他地方遇到一样的滑块验证,只要是 selenium 调用的浏览器都无法划过去,挠头。结果也是用了 @5200 的方法干,不太稳定就是
5200
2019-01-17 17:14:18 +08:00
@frogex AHK 类似按键吧,位置什么的多一点判断就行,
有些位置比较不好识别我直接使用谷歌的控制台。
之前我也是 selenium + chrome headless,但是始终过不了登录的检测,
只要通过 selenium 启动起来的 chrome,就算手动登录那个滑块也通过不了。
反正之前折腾了一个星期也算是解决了。
中间偶尔位置有偏差的就修修补补了,现在也算能稳定了。
不过还在寻求新的更好的方法。
locoz
2019-01-17 17:41:15 +08:00
@ioven #19 hhhhhhhhh 阿里的 APP 只会更难,不会更容易。阿里系 APP 通用加密头了解一下
frogex
2019-01-17 19:25:59 +08:00
@5200
阿西吧, 这样也就必须一台机器前台运行了吧,如果抓取量大了就很慢了。 另外,你是怎么获取数据?
yangsi
2019-01-18 04:36:25 +08:00
在虚拟机里面运行和前台运行有区别吗? 还有能不能用其他浏览器?
ioven
2019-01-18 08:22:47 +08:00
@locoz 忘了还有这玩意。。。
yumenlong
2019-01-18 09:16:57 +08:00
换 pyqt 或者其他的非 selenium 驱动浏览器方案可以过检测
frogex
2019-01-18 09:34:41 +08:00
@yangsi
当然可以,主要是不能确定靠什么检测的,试过 PhantomJS 也是不行
frogex
2019-01-18 09:35:43 +08:00
@yumenlong
不会 pyqt,不过应该不只是 selenium 的问题,光看 taobao 的 js 就有 chromedriver 的指纹检测
yinaqu
2019-01-18 09:43:44 +08:00
兄弟,你是写 java 还是 python。
lkwfive
2019-01-18 09:57:57 +08:00
win10 和 OS_x 用 puppeteer 亲测自动登录有效
frogex
2019-01-18 10:02:59 +08:00
@yinaqu
工作很多年了,90%时间写 C++
frogex
2019-01-18 10:08:23 +08:00
@lkwfive
没试过这个,有空试下吧,不过用什么工具 taobao 应该还是都会检测的
soulmine
2019-01-18 10:12:03 +08:00
反爬这东西 你觉得 tb 有多少人在搞
yinaqu
2019-01-18 10:29:24 +08:00
@frogex 过滑块之前只检测了 navigator.webdriver 这个特征,最近 TB 更新了验证,只改这个特征不行了。然后呢,可以很明确的说过不了滑块并不是因为 selenium 被检测到,而是 webdriver 的某些特征被检测到了(即使非 headless 用手拖也过不了),因为我使用的一款工具底层使用 selenium 但是可以过滑块。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/527879

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX