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
Mrkon
V2EX  ›  Python

求帮助:如何解决拥有加密表单的爬虫问题

  •  
  •   Mrkon · 2018-03-03 18:02:39 +08:00 · 2675 次点击
    这是一个创建于 2456 天前的主题,其中的信息可能已经有所发展或是发生改变。

    欧专局: 在每次查询的时候都会运行 check提供需求页面的 cookie 的 browser.presence 项

    需求页面: 欧专局专利

    check 表单截图如下: check

    10 条回复    2018-03-06 11:25:30 +08:00
    yuanfnadi
        1
    yuanfnadi  
       2018-03-03 21:27:29 +08:00 via iPhone
    puppetter
    yexiaoxing
        2
    yexiaoxing  
       2018-03-04 03:34:13 +08:00
    selenium? chromedriver?
    Mrkon
        3
    Mrkon  
    OP
       2018-03-04 15:21:49 +08:00
    @yuanfnadi
    @yexiaoxing
    能不能通过破解 js 来解决问题啊,个人不太喜欢用 selenium 之类的
    locoz
        4
    locoz  
       2018-03-04 17:09:03 +08:00   ❤️ 1
    events 是鼠标在页面里停留的位置和时间 fp 可以直接随机生成一下 ts 和 nts 是时间戳不用说了吧

    "{"a":{"ts":1520152823,"events":[{"ts":73,"t":"mm","x":101,"y":27},{"ts":73,"t":"mm","x":103,"y":10},{"ts":73,"t":"mm","x":103,"y":4}......]},"fp":"4dba123c2b5b2e4f123a5c936aabcd","nts":1520152978}"

    加密部分:
    ```
    t.encode = function(e){
    var t, n, r = {}, i = (e + "").split(""), o = [], a = i[0], s = 256;
    for (t = 1; t < i.length; t++)
    n = i[t],
    r[a + n] ? a += n : (o.push(a.length > 1 ? r[a] : a.charCodeAt(0)),
    r[a + n] = s,
    s++,
    a = n);
    for (o.push(a.length > 1 ? r[a] : a.charCodeAt(0)),
    t = 0; t < o.length; t++)
    o[t] = String.fromCharCode(o[t]);
    return o.join("")
    }
    ```
    Mrkon
        5
    Mrkon  
    OP
       2018-03-04 18:39:22 +08:00
    @locoz 谢谢大神,我如何才能和你一样秀,我找到了这个 js 代码
    https://worldwide.espacenet.com/hdl/js/hdl.js?date=04-03-2018
    其中有一段代码:
    return this.ajax({type:"POST",url:t.getUrl(t.host+"/check"),data:{data:l.encode(JSON.stringify({a:e,fp:this.fingerprint,nts:u.getNow()}))}}).
    这个有用吗?如果有用我改如何继续研究呢?求解答!
    locoz
        6
    locoz  
       2018-03-04 18:42:01 +08:00
    @Mrkon 这段就是个 ajax 请求啊。。没啥用 自己实现请求部分就好了
    Mrkon
        7
    Mrkon  
    OP
       2018-03-05 14:17:26 +08:00
    @locoz 谢谢:),再厚着脸皮问一下,fp 是通过 js 的 fingerprint 随机生成的吗?还有就是这个表单的未加密前的模样是怎么判断出来的啊,我找了许久都没找到。
    locoz
        8
    locoz  
       2018-03-05 17:49:22 +08:00   ❤️ 1
    @Mrkon ajax 部分不是有嘛,下个断点在 encode 那就看得到了
    locoz
        9
    locoz  
       2018-03-05 17:50:50 +08:00   ❤️ 1
    @Mrkon fp 是 js 生成的浏览器指纹,爬他不用管这个,直接随机一个发过去就行
    Mrkon
        10
    Mrkon  
    OP
       2018-03-06 11:25:30 +08:00
    @locoz 表单已经合成,谢谢了。虽然我抓取网站还是没有成功( 302 跳转),headers,cookies,各项合成之后还是会跳转,是不是合成的 cookies 只能用一次啊,但是用浏览器进入抓取页面会过段时间才会失效,应该不是这个原因。对于隐藏表单和蜜罐肯定是不可能的。我能想到得到的招都用了,若有时间的话还望不吝赐教。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2792 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:51 · PVG 19:51 · LAX 03:51 · JFK 06:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.