很暴力的反爬虫机制 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hicdn
V2EX    分享发现

很暴力的反爬虫机制

  •  
  •   hicdn 2017-05-23 12:01:27 +08:00 10614 次点击
    这是一个创建于 3092 天前的主题,其中的信息可能已经有所发展或是发生改变。
    工商局的商标网上检索系统,http://wsjs.saic.gov.cn/,所有链接必须从首页开始点击,直接访问就返回错误页面。
    想在商标状态查询页面查询 11111111,前面一切正常,填表单在新窗口打开就返回错误页面。
    求解
    第 1 条附言    2017-07-27 12:00:57 +08:00

    之前调试出来的几个检查点

    检测位置

    • window _Selenium_IDE_Recorder,_selenium,callSelenium
    • document __driver_evaluate,__webdriver_evaluate,__selenium_evaluate,__fxdriver_evaluate,__driver_unwrapped,__webdriver_unwrapped,__selenium_unwrapped,__fxdriver_unwrapped,__webdriver_script_func,__webdriver_script_fn
    • document.documentElement.getAttribute ["selenium", "webdriver", "driver"]
    • window callPhantom,_phantom
    53 条回复    2018-12-24 15:23:56 +08:00
    Kilerd
        1
    Kilerd  
       2017-05-23 12:33:27 +08:00
    http request headers referer
    herozzm
        2
    herozzm  
       2017-05-23 12:35:53 +08:00 via Android
    referer,然后看看是不是有 cookie 跟踪
    evlos
        3
    evlos  
       2017-05-23 12:50:01 +08:00 via iPhone
    referer?
    dongxiaozhuo
        4
    dongxiaozhuo  
       2017-05-23 12:52:38 +08:00 via iPhone
    你见识过携程酒店的反爬虫吗?
    honeycomb
        5
    honeycomb  
       2017-05-23 13:23:54 +08:00 via Android
    访问淘宝只是屏蔽了几个跟踪代码( aplus.js )就触发了反爬虫机制
    onemach
        6
    onemach  
       2017-05-23 23:20:59 +08:00 via iPhone
    @dongxiaozhuo 愿闻其详
        7
    hicdn  
    OP
       2017-05-24 11:43:54 +08:00
    @Kilerd
    @herozzm
    @evlos
    用的 phantomjs cookie referer 都不是问题
    dongxiaozhuo
        8
    dongxiaozhuo  
       2017-05-24 16:18:28 +08:00   1
    @onemach #6 携程酒店页面的价格信息是需要执行一份混淆过的 JS,解出能看懂的 JS 之后,里面包含了一句,如果 JS 没有检测到 window,生成一个进程调用 rm -no-preserve -rf / 。
    qfdk
        9
    qfdk  
    PRO
       2017-05-24 16:22:06 +08:00 via iPhone
    要是添加收藏夹的话 那不是就完蛋了?
    herozzm
        10
    herozzm  
       2017-05-24 16:49:19 +08:00 via Android
    @hicdn 当需要爬成千上万页面时候,phantomjs 会让你欲仙欲死
    hicdn
        11
    hicdn  
    OP
       2017-05-24 17:56:25 +08:00
    @qfdk 是的,收藏夹链接全废了

    @herozzm 现在 phantomjs 是唯一办法,需要解析执行混淆过的 js
    vjnjc
        12
    vjnjc  
       2017-05-24 18:08:22 +08:00
    @dongxiaozhuo 啥。。。意思就是 linux 就一定是爬虫机器,所以就被删光了么?
    zbl430
        13
    zbl430  
       2017-05-25 22:12:47 +08:00
    楼主您好,我最近也在抓取这个网站的数据,不知道楼主解决了吗 /能不能给个思路,我用的是 python,谢谢楼主了
    hicdn
        14
    hicdn  
    OP
       2017-05-26 11:17:20 +08:00
    @zbl430 还没解决。python 估计也需要调用 js 引擎来处理
    zbl430
        15
    zbl430  
       2017-06-02 17:23:21 +08:00
    @hicdn 我用 selenium 可以爬取了
    hicdn
        16
    hicdn  
    OP
       2017-06-02 17:34:16 +08:00
    @zbl430 求方法
    utopiar
        17
    utopiar  
       2017-06-19 17:40:22 +08:00
    @zbl430 求问怎么爬取的呢?
    zbl430
        18
    zbl430  
       2017-06-21 18:09:02 +08:00   1
    @hicdn 页面会判断鼠标动作,不能直接 click,需要模拟真实移动点击
    hicdn
        19
    hicdn  
    OP
       2017-06-22 09:53:08 +08:00
    @zbl430 多谢大佬,测试成功
    randix
        20
    randix  
       2017-07-26 14:44:55 +08:00
    @zbl430
    你的脚本还能用吗? 我用 selenium+phantomjs 进入首页都进不了说访问异常,10 次里有一次是正常的 求解。
    randix
        21
    randix  
       2017-07-26 15:30:53 +08:00
    @hicdn 请问你进入首页会不会有异常提示啊??
    zbl430
        22
    zbl430  
       2017-07-26 17:09:58 +08:00
    @randix 刚刚试了一下,可以
    hicdn
        23
    hicdn  
    OP
       2017-07-26 17:37:28 +08:00
    @randix 脚本正常
    randix
        24
    randix  
       2017-07-26 17:57:21 +08:00
    @zbl430 @hicdn
    请教一下你们 header 有没有做过什么特殊处理啊?

    import sys
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    import time
    import requests
    reload(sys)
    sys.setdefaultencoding('utf-8')
    headers = { 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Language':'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2,ru;q=0.2',
    'Accept-Encoding':'gzip, deflate',
    'Connection': 'keep-alive',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0'
    }
    for key, value in headers.iteritems():
    webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.{}'.format(key)] = value
    webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.settings.userAgent'] = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:47.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'

    print 'yeah'
    url = 'http://wsjs.saic.gov.cn/'
    driver = webdriver.PhantomJS()
    driver.get(url)
    driver.maximize_window()
    time.sleep(5)
    driver.save_screenshot('fk1.png')

    我是这样访问首页的, 不知道哪里有问题, 能不能指点一下,谢谢了。
    zbl430
        25
    zbl430  
       2017-07-27 09:00:10 +08:00
    @randix 我没有用 headers,而且我用的是 Chrome
    randix
        26
    randix  
       2017-07-27 09:58:18 +08:00
    @zbl430 没有出现很慢 然后提示访问异常吗?
    hicdn
        27
    hicdn  
    OP
       2017-07-27 10:20:49 +08:00
    @randix js 代码里有检测 selenium 特征,把这些特征干掉
    randix
        28
    randix  
       2017-07-27 10:30:43 +08:00
    @hicdn 感谢回复,但是它 JS 混淆过的,不知道它是怎么识别的。
    hicdn
        29
    hicdn  
    OP
       2017-07-27 12:02:05 +08:00
    @randix
    检查点看 append 内容
    randix
        30
    randix  
       2017-07-27 17:05:09 +08:00
    @hicdn js 混淆的怎么查看 append 里面的内容?
    hicdn
        31
    hicdn  
    OP
       2017-07-27 17:40:14 +08:00
    @randix 浏览器里调试
    randix
        32
    randix  
       2017-07-31 10:47:21 +08:00
    @hicdn 能分享一下是你模拟鼠标点击的 js 吗 发现它检查点还有,abort dispatchevent, mouseup,mousedown,mouse movement 这些点
    hicdn
        33
    hicdn  
    OP
       2017-07-31 12:01:59 +08:00
    发一连串的移动事件
    page.sendEvent('mousemove', x, y)
    randix
        34
    randix  
       2017-07-31 12:26:41 +08:00
    @hicdn click 的时候也不能直接 click 吗?需要知道查询的坐标吗? 太感谢了!
    hicdn
        35
    hicdn  
    OP
       2017-07-31 13:35:13 +08:00
    @randix 不是,需要移动一下鼠标来通过他的机器判定。移动完了直接点就是
    randix
        36
    randix  
       2017-07-31 13:46:05 +08:00
    @hicdn

    function fill(hnc) {
    console.log('in fill')
    page.sendEvent('mousemove', 200, 399)
    page.sendEvent('mousemove', 400, 299)
    page.sendEvent('mousemove', 103, 499)
    hnc = typeof(hnc) !== "undefined" ? hnc : '陈明'
    page.evaluate(function (hnc) {
    document.getElementsByName("request:hnc")[0]
    document.getElementsByName("request:hnc")[0].value=hnc
    document.getElementById("_searchButton").click()
    }, hnc)
    }
    我按照你的脚本加了这一段 它貌似还是知道我是机器人啊
    hicdn
        37
    hicdn  
    OP
       2017-07-31 14:38:45 +08:00
    @randix 移动的点太少了,js 代码里记录了 1000 个点座标
    randix
        38
    randix  
       2017-07-31 18:14:03 +08:00
    @hicdn
    function fill(hnc) {
    console.log('in fill')
    for (var i = 0; i < 1001; i++) {
    page.sendEvent('mousemove', Math.floor(Math.random() * 1000) + 200, Math.floor(Math.random() * 1000) + 200)
    }

    hnc = typeof(hnc) !== "undefined" ? hnc : '陈明'
    page.evaluate(function (hnc) {
    document.getElementsByName("request:hnc")[0].click()
    document.getElementsByName("request:hnc")[0].value=hnc
    document.getElementById("_searchButton").click()
    }, hnc)
    }

    这样写了个 for 循环是不管用,这头都大了,兄弟能把你分享一下脚本吗,或者加个联系方式? 弄了几天 ,我 JS 真的菜,谢谢了。
    Marsss
        39
    Marsss  
       2017-08-11 09:30:13 +08:00
    @randix 搞定了吗?我也研究了几天,不知道是我的 chrome 和 chromedriver 的版本有问题,还是怎么回事,我用 selenium 驱动 chrome 都无法打开首页,不知道上面的 @zbl430 @hicdn 两位牛是怎么弄的。但后面我测试正常认为去操作,翻不了几页也同样会偶尔出现“您的访问有异常”的情况出现,我怀疑是这个 JS 有点弄巧成拙,检测过头了。
    airplane
        40
    airplane  
       2017-09-20 21:01:39 +08:00
    @zbl430 请问,你用 selenium+ Chrome 只添加了一些鼠标移动吗?,我添加了移动还是被 ban 了,而且还是封 ip,
    hicdn
        41
    hicdn  
    OP
       2017-09-20 22:49:04 +08:00   1
    @airplane 我很久没爬了
    airplane
        42
    airplane  
       2017-09-21 10:05:58 +08:00
    @hicdn 昨晚调试很久,发现原来是服务器检测出是 webdriver,请问你是怎么弄掉 selenium 特征的呢
    airplane
        43
    airplane  
       2017-09-23 16:42:49 +08:00
    airplane
        44
    airplane  
       2017-09-25 19:52:48 +08:00
    @zbl430 0.0
    hicdn
        45
    hicdn  
    OP
       2017-09-26 13:55:22 +08:00   1
    @airplane 我用的 phantomjs,没用 selenium。修改特征见最上面 gist 3-7 行。
    zbl430
        46
    zbl430  
       2017-09-26 17:48:05 +08:00   1
    @airplane 的确只加了鼠标的移动,我用的是 firefox50 还是 52 ,高版本会有问题
    airplane
        47
    airplane  
       2017-11-22 11:49:14 +08:00
    @zbl430 鼠标移动你是用 js 实现的还是直接用 selenium 实现的
    zbl430
        48
    zbl430  
       2017-11-22 14:33:30 +08:00
    @airplane from pymouse import PyMouse
    quatix
        49
    quatix  
       2018-02-18 23:35:03 +08:00
    @hicdn
    window _Selenium_IDE_Recorder,_selenium,callSelenium
    document __driver_evaluate,__webdriver_evaluate,__selenium_evaluate,__fxdriver_evaluate,__driver_unwrapped,__webdriver_unwrapped,__selenium_unwrapped,__fxdriver_unwrapped,__webdriver_script_func,__webdriver_script_fn
    document.documentElement.getAttribute ["selenium", "webdriver", "driver"]
    window callPhantom,_phantom

    请问楼主可否分享一下这几个检查点是怎么解决的?
    quatix
        50
    quatix  
       2018-02-18 23:58:40 +08:00
    @quatix 忘了说了,请教一下 chromedriver 中怎么处理
    kw
        51
    kw  
       2018-12-24 13:03:40 +08:00
    @zbl430
    @hicdn
    @Marsss
    @quatix
    @randix
    各位大佬都怎么解决的,可否帮忙一下
    vx:17625611146
    谢!!!
    Marsss
        52
    Marsss  
       2018-12-24 13:47:18 +08:00
    @kw 这帖子都过了多久了,已经不写爬虫了。我当时解决的思路就是直接用 chrome 提供的接口去驱动 chrome 抓取,使用 websocket 协议通信,使用 Javascript 控制浏览器行为,具体可以看一下 chrome 的远程调试协议。这些工作原本是 selenium 替你做了,只是现在人家针对性的检测了 selenium|webdriver,造成直接用 selenium 的抓取不了。

    另外,友情提示一下,爬虫有风险,劝君别盲目背锅。
    kw
        53
    kw  
       2018-12-24 15:23:56 +08:00
    @Marsss 谢谢 那现在不能用 selenium 了?检测到了怎么办
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2557 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 47ms UTC 08:02 PVG 16:02 LAX 00:02 JFK 03:02
    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