淘宝反爬求解 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
frogex
V2EX    Python

淘宝反爬求解

  •  
  •   frogex 2019-01-17 11:53:16 +08:00 15206 次点击
    这是一个创建于 2464 天前的主题,其中的信息可能已经有所发展或是发生改变。
    爬虫新人,主要要爬淘宝一些搜索结果和商品的销量。
    参考的帖子非常多:
    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 还有什么特征不同吗?
    72 条回复    2020-07-10 15:07:57 +08:00
    frogex
        1
    frogex  
    OP
       2019-01-17 12:01:15 +08:00
    最初以为仅仅是滑块轨迹问题,但实际上,用 webdriver 打开 chrome 后,怎么手动都滑不过,后来才知道可能有检测环境之类。 说白也很难,如果特征有 100 个,不同的有 20 个,淘宝采集了 4 个,你没防那就被识破了
    WaJueJiPrince
        2
    WaJueJiPrince  
       2019-01-17 12:58:11 +08:00
    人工登陆,然后记录登陆信息可以吗?
    使用 Selenium 中的 user-data-dir 参数。另外,淘宝好像是登陆以后频繁的翻页也会触发验证码。
    yulgang
        3
    yulgang  
       2019-01-17 12:58:30 +08:00
    @frogex 爬虫不会。但是考虑过爬手机页面么?说不定会没有那么多检测。
    a312901237
        4
    a312901237  
       2019-01-17 13:11:40 +08:00
    你 QQ 多少,联系我 Q312901237
    frogex
        5
    frogex  
    OP
       2019-01-17 13:44:55 +08:00
    @WaJueJiPrince
    本质不是想登陆,而是想过滑块,因为现在手工记录 cookie 去爬价格(商品详情页),还是时不时要验证
    autulin
        6
    autulin  
       2019-01-17 14:17:28 +08:00 via iPhone
    试过现在的版本很容易触发登陆机制,就算登陆了多点几下就要验证,也没有那么多帐号来试,想知道楼主怎么解决这个问题
    frogex
        7
    frogex  
    OP
       2019-01-17 14:17:40 +08:00
    @yulgang 手机页查过资料,据说也反爬, 刚试了下 fiddler 抓不到,不知道走的是不是二进制协议
    dengtongcai
        8
    dengtongcai  
       2019-01-17 14:20:17 +08:00 via iPhone
    扫码登录吧…账密太多验证了
    frogex
        9
    frogex  
    OP
       2019-01-17 14:21:21 +08:00
    @autulin 登陆没啥,手工获取 cookie,我的任务每周爬个 3 天就差不多可以了。 问题主要是滑块不好过,非 headless 下大概率过,但这显然不够好
    momocraft
        10
    momocraft  
       2019-01-17 14:28:02 +08:00
    无头有头总归有区别的。如果无头不会真的渲染到屏幕,那 canvas 的行为可能就大不一样。

    以前甚至见过用 canvas 字体渲染差异做浏览器指纹的论文..
    zr8657
        11
    zr8657  
       2019-01-17 14:30:33 +08:00
    淘宝的销量只算今天往前推 30 天,LZ 打算怎么算日销量?商品列表的话就算你是正常用户翻个 7-8 页左右也会有验证码,selenium 的话大概 5-6 页会有滑块,再往后会有手机验证码不知你遇到没。详情页不需要登录就有价格啊,我是直接堆 ip
    frogex
        12
    frogex  
    OP
       2019-01-17 14:37:17 +08:00
    @momocraft
    我主要看了下 taobao 的那个 index.js 会有这么一句
    function i() {
    if (a())
    return !1;
    try {
    return !!u.createElement("canvas").getContext("webgl")
    } catch (n) {
    return !1
    }
    }
    function a() {
    return "ontouchstart"in u
    }
    实际上对于 i()的返回值,有头无头都试过了是一样的,所以姑且认为没靠这些检查。
    话说这也是个死坑,哪天淘宝又改了这个 js 用别的检测方法也就没用了
    5200
        13
    5200  
       2019-01-17 14:37:48 +08:00
    之前也卡在这一块,后面通过比较 low 的方法解决了。
    frogex
        14
    frogex  
    OP
       2019-01-17 14:50:48 +08:00
    @zr8657
    其实是要拿详情页的成交量而不是价格,实时的数据里面和外面有些不同的,包括价格。
    手机验证码没遇到。翻页的验证码我是尝试 3 次滑动,没过 kill 掉记录时间,让父进程 x 分钟后拉起接着爬,虽然慢一点好歹也可以爬完。商品搜索列表页封的不严,但商品详情页就很严了,kill 很多次都还弹验证
    ioven
        15
    ioven  
       2019-01-17 14:52:03 +08:00
    如果数量不少很多,用 firefox49 + imacros 试试?
    frogex
        16
    frogex  
    OP
       2019-01-17 14:54:07 +08:00
    @5200 怎么 low 的方法?只要不人工就不 low 啊
    2 个月前有一个接口可以拿
    https://detailskip.taobao.com/service/getData/1/p1/item/detail/sib.htm?itemId=x&modules=dynStock,qrcode,viewer,price,duty,xmpPromotion,delivery,activity,fqg,zjys,couponActivity,soldQuantity,originalPrice,tradeContract&callback=onSibRequestSuccess,
    加 cookie 和 referer 就好了,现在封了,要在 cookie 里带一个 x5sec 才能过,不然返回 rgv587 这样的东西。而这个 x5sec 是通过滑块后才能获取,且只有半小时时间。
    frogex
        17
    frogex  
    OP
       2019-01-17 14:59:03 +08:00
    @ioven 不是工具问题,而是怎么突破反爬啊
    5200
        18
    5200  
       2019-01-17 15:00:52 +08:00
    @frogex
    之前也是用 python,结果只要是通过 python 唤起的浏览器就一个劲的验证码。
    后面专门拿了一台电脑,挂脚本,使用 AHK 写了一个小脚本。
    模拟人工登录,拉取一些订单记录什么的。
    获取一些信息,通过浏览器的控制器获取。
    淘宝对页面刷新有频率限制,中间间隔几分钟再获取,
    貌似频繁的翻页,和访问淘宝页面很容易出验证码,
    他的频繁好像是针对的是这个 ip 下,如果 ip 里面有一个人有验证码了,
    另外一个同 IP 下的账户也会出验证码。
    ioven
        19
    ioven  
       2019-01-17 15:06:34 +08:00
    @frogex 抓包 app 数据试试,一般 app 更容易
    frogex
        20
    frogex  
    OP
       2019-01-17 15:11:46 +08:00
    @5200 感觉不是频率这么简单吧,我要的数据不是特别多,所以爬的时候很克制了。 不过目前能爬完也是 kill + 等待拉起的方式,过搜索列表页还可以,过商品详情页就很难了,有时一直弹窗要验证
    frogex
        21
    frogex  
    OP
       2019-01-17 15:15:24 +08:00
    @ioven app 的逆向就要破协议了,这个我更加没经验,有什么方法吗
    5200
        22
    5200  
       2019-01-17 15:23:22 +08:00
    @frogex 你目前是使用什么方式的呢,
    我之前也尝试过很多种工具和语言方法,
    有些工具就连登录都过不了,
    淘宝里面的检测方法多得很,
    也没精力去一个一个研究,
    最后就使用脚本类,模拟键盘鼠标,
    这个网页端肯定是检测不到的,
    目前稳定运行了半年多了。
    frogex
        23
    frogex  
    OP
       2019-01-17 15:50:24 +08:00   1
    @5200
    你这个用按键精灵?感觉更不好稳定吧,如果位置什么的有偏差就做不了啊
    我目前是
    1.selenium + chrome headless, 爬列表页面,价格等数据有小几率获取,获取不到的记录-1。
    2.另外启 selenium + chrome noheadless,随机获取-1 的数据循环重新请求价格,销量。
    3.cookie 每天更换一次,chrome noheadless,每天早上 9 点爬虫会更新 cookie,时间不对(不是当天的 cookie )就手动扫码获取 cookie

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

    淘宝也有付费 api,不过 leader 还是希望能神不知鬼不觉的用爬虫比较好
    frogex
        43
    frogex  
    OP
       2019-01-18 11:34:41 +08:00
    @yinaqu
    淘宝检测了什么我不确定是不是只在 sufei_data 那个 js 里,从我分析看,至少有检测了 10 个函数,至少 headless 都 pass 了和非 headless 一样的结果。其他的实在看不下去了,都是混淆过的代码,命名 abcdefg,函数各种混着赋值,似乎要人肉维护一个函数调用关系
    frogex
        44
    frogex  
    OP
       2019-01-18 11:35:34 +08:00
    @dengtongcai
    爬简单,要能稳定长期、全自动化、有效的爬才难啊
    winglight2016
        45
    winglight2016  
       2019-01-18 11:45:50 +08:00
    我在 mac 上的 chrome,纯手动打开都会反复要求登录,天猫的商品实际价格也出不来,不知道是啥情况?
    beforeuwait
        46
    beforeuwait  
       2019-01-18 11:57:01 +08:00
    阿里的反爬太厉害了
    yanzixuan
        47
    yanzixuan  
       2019-01-18 12:22:27 +08:00
    阿里的反爬,我特么正常使用也经常不行啊。动不动就要验证。。。
    ctro15547
        48
    ctro15547  
       2019-01-18 13:01:16 +08:00
    机子支持开几个 android 虚拟机?
    dengtongcai
        49
    dengtongcai  
       2019-01-18 13:10:52 +08:00
    @frogex 扫码登录不能做吗,我就是扫码
    NonClockworkChen
        50
    NonClockworkChen  
       2019-01-18 13:23:38 +08:00
    要爬淘宝,我内心是拒绝的
    frogex
        51
    frogex  
    OP
       2019-01-18 16:21:03 +08:00
    @dengtongcai
    请看全文,不仅是登陆,是要长期稳定的爬,且能过各种滑块,目前最终方案在 23F, 放 win 虚拟机跑了
    IWSR
        52
    IWSR  
       2019-01-18 17:40:33 +08:00
    你们就没考虑过淘宝写反爬的也在 V2EX 里面看这贴吗
    frogex
        53
    frogex  
    OP
       2019-01-19 10:50:03 +08:00
    @IWSR
    那能怎么办?讨论爬虫的帖子超级多,可讨论反爬的实在太少了,工作这么久身边也基本没一个人做过这些的
    xiao38245
        54
    xiao38245  
       2019-01-19 11:56:50 +08:00
    我之前爬过手机端淘宝, m.taobao.com 加密的参数只有一个, 我记得是 md5 加密来着, 还算简单, 知乎有帖子
    iamdaguduizhang
        55
    iamdaguduizhang  
       2019-01-19 15:21:49 +08:00
    iamdaguduizhang
        56
    iamdaguduizhang  
       2019-01-19 15:23:08 +08:00
    现在这个也不能爬了,
    frogex
        57
    frogex  
    OP
       2019-01-19 15:46:52 +08:00
    @xiao38245
    手机淘宝是二进制的协议吧,要破协议,这个我没经验。而且直接抓接口的方法淘宝随便封更容易,感觉还是模拟人的操作稍微靠谱点
    wc110302
        58
    wc110302  
       2019-01-21 18:59:34 +08:00
    修改 chromedriver 源码以及 mitmdump 挂脚本,拦截 js 的方法我都使用过,noheadless 确实都能大概率过,但是 headless 就一次过不了,也就说只能在 windows 上跑了,暂时也没想到什么好的方法能挂在 liunx 上。先 mark 一下
    keyakizaka46
        59
    keyakizaka46  
       2019-01-21 20:15:57 +08:00
    @frogex 最近接了一个爬取天猫的任务,也是被各种反爬搞的焦头烂额。我可以有酬买你的源码吗?
    yinaqu
        60
    yinaqu  
       2019-01-22 18:04:40 +08:00
    @wc110302 linux 不是也有图形界面吗
    mrcomer
        61
    mrcomer  
       2019-01-23 21:47:26 +08:00
    @frogex 老哥,加我 wx:16620341036
    iamdaguduizhang
        62
    iamdaguduizhang  
       2019-01-24 14:53:57 +08:00
    @keyakizaka46 我有可以爬取淘宝 h5 的代码,可以用
    keyakizaka46
        63
    keyakizaka46  
       2019-01-24 16:21:33 +08:00
    @iamdaguduizhang 加我 QQ:690930494
    okface
        64
    okface  
       2019-01-26 17:23:48 +08:00
    @iamdaguduizhang 老哥,加我 qq 394115733
    okface
        65
    okface  
       2019-01-26 18:09:03 +08:00
    @frogex 老铁,我问一句,你们用了多少个淘宝账号在爬数据?这些账号哪里来的?是账号更容易被封还是 IP 更容易被封?
    okface
        66
    okface  
       2019-01-28 21:15:34 +08:00
    @5200 老铁,脚本类的你们每天能爬多大量级
    love9918
        67
    love9918  
       2019-02-12 10:31:28 +08:00
    之前研究过一段,淘宝现在好像没验证了,使用 cookie 随机 useragent 外加随机代理跳过登录,直接爬取信息
    thursday
        68
    thursday  
       2019-02-28 19:28:07 +08:00
    有需要爬淘宝 app 需求的可以加我 qq 都能爬 348531171
    thursday
        69
    thursday  
       2019-02-28 19:30:05 +08:00
    用的是 app 接口计算 xsign
    515576745
        70
    515576745  
       2019-03-09 16:37:04 +08:00
    @love9918 一直有验证呀...
    lxk11153
        71
    lxk11153  
       2020-03-16 22:29:18 +08:00
    @frogex #16 x5sec 的问题好难,而且不同地方貌似检测级别不一样,比如登录好像低一点(登录时滑动通过了)
    然后进页面,页面请求 api,返回个错误需要 x5sec 然后弹框让你滑动,页面是显示滑动通过的,然后页面再次请求 api 又告诉你还需要滑[滑稽]。。。懵了
    no13bus
        72
    no13bus  
       2020-07-10 15:07:57 +08:00
    楼主问题解决了吗?想跟你交流下。我的微信 no13bus
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2364 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 15:54 PVG 23:54 LAX 08:54 JFK 11:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86