python登录V2EX失败 - 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
xuelang
V2EX    Python

python登录V2EX失败

  •  
  •   xuelang
    selfboot 2013-05-12 10:36:53 +08:00 7793 次点击
    这是一个创建于 4607 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前看了“谁写个自动领取奖励脚本?”(http://www.v2ex.com/t/68136),自己刚接触python,所以想试着写一个练练手。

    用到python的requests库,关于网站登录部分,分析了一下登录提交的表单,有5个字段,类似下面:
    next=%2F&u=***&p=***&Once=21381&next=%2F

    首先分析登录界面取出next,once,next值,分别为input_next_value_pre、input_once_value、input_next_value_post, 然后用requests请求页面,主要代码如下:
    signin_url = "http://www.v2ex.com/signin"
    user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) \
    AppleWebKit/537.31 (KHTML, like Gecko) \
    Chrome/26.0.1410.65 Safari/537.31"
    headers = {"User-Agent": user_agent}

    logininfo = {"next": input_next_value_pre,
    "u": usr_name,
    "p": passwd,
    "once": input_once_value,
    "next": input_next_value_post
    }
    signin_req = requests.post(signin_url,
    data=logininfo,
    headers=headers,
    )

    结果登录老是失败,怀疑是v2ex的登录表单中有两个next字段,并且值一样,这样构建post字典第二个next就被忽略,不知道该怎么解决呢?
    第 1 条附言    2013-05-13 08:50:51 +08:00
    37 条回复    1970-01-01 08:00:00 +08:00
    whtsky
        1
    whtsky  
       2013-05-12 10:45:13 +08:00 via iPhone
    你很缺钱么…
    DH
        2
    DH  
       2013-05-12 11:06:32 +08:00   1
    我估计是cookie的问题,你在post之前,先GET一次,把cookie存下来,再post。
    swulling
        3
    swulling  
       2013-05-12 11:15:23 +08:00   1
    1. 第一次请求的时候有PB3_SESSION的cookie,不用存,用requests的话直接用Session就很方便
    2. next不是问题,你提交两个就好了
    3. 注意POST的Referer要带上

    实测可以登陆,没问题
    swulling
        4
    swulling  
       2013-05-12 11:16:01 +08:00   1
    4. next不用分析页面,直接'/'就好
    xuelang
        5
    xuelang  
    OP
       2013-05-12 11:38:01 +08:00
    @whtsky 不是,只是对网站自动验证感兴趣,又看到那个问题,就拿v2ex做了下实验了
    xuelang
        6
    xuelang  
    OP
       2013-05-12 11:38:59 +08:00   1
    @DH
    @swulling
    谢谢,已解决。
    DH
        7
    DH  
       2013-05-12 11:42:32 +08:00   1
    网站防爬虫的办法是五花八门,每个站都不一样。
    xuelang
        8
    xuelang  
    OP
       2013-05-12 11:44:23 +08:00
    @DH 那要爬网站时,认证时有没有什么一般的思路呢?
    swulling
        9
    swulling  
       2013-05-12 11:45:29 +08:00   1
    @xuelang 分析请求。模拟人工操作。

    一般来说,只要不是开验证码或者用浏览器插件。。凡是人能做的,机器也能做
    xuelang
        10
    xuelang  
    OP
       2013-05-12 11:48:03 +08:00
    @swulling 嗯,明白了。
    xuelang
        11
    xuelang  
    OP
       2013-05-12 11:52:08 +08:00
    @swulling 不过说到底还是要了解http协议,web的一些知识。
    DH
        12
    DH  
       2013-05-12 11:53:45 +08:00   1
    一般就是cookie上做文章,有些好像是js设置cookie,就得运行js代码或者弄明白算法自己算。

    苹果那个下单页面,把cookie放在静态文件里面,这些文件一般爬虫不抓,就缺cookie的值。
    Aeolia
        13
    Aeolia  
       2013-05-12 15:00:22 +08:00
    @xuelang 请问最后是怎么解决的?
    beakey
        14
    beakey  
       2013-05-12 16:01:21 +08:00
    @xuelang once的随即生成就可以?
    xuelang
        15
    xuelang  
    OP
       2013-05-12 17:25:45 +08:00
    @Aeolia post请求头加了Referer,并且用requests的Session.
    xuelang
        16
    xuelang  
    OP
       2013-05-12 17:26:39 +08:00
    @beakey once先get一下登陆界面,分析html取出once值。
    yanwen
        17
    yanwen  
       2013-05-12 22:00:20 +08:00
    菜鸟求代码。
    yaotian
        18
    yaotian  
       2013-05-12 22:30:04 +08:00
    @swulling 可有些网站有加密的,例如weibo.com的登陆。机器去做不是很容易的。
    flewover
        19
    flewover  
       2013-05-12 22:33:17 +08:00
    @yaotian weibo.com如何做加密的?我之前有用过selenium的api登录weibo.com很容易。
    swulling
        20
    swulling  
       2013-05-12 23:10:33 +08:00
    @yaotian 没啥不容易的

    不嫌烦的话用python去模拟js的行为,嫌烦的话直接用这个
    https://github.com/DYFeng/GRobot

    除非丧心病狂用flash,activex。。
    yaotian
        21
    yaotian  
       2013-05-13 00:07:46 +08:00
    @swulling 占用资源大吗?
    xuelang
        22
    xuelang  
    OP
       2013-05-13 08:53:01 +08:00
    @yanwen 我也第一次写.
    swulling
        23
    swulling  
       2013-05-13 13:09:17 +08:00
    @yaotian gevent + webkit,应该不高,不过我没测过性能

    作者原来是webkit/selenium二选一,后者资源占用比较大,貌似新版本去掉了
    yanwen
        24
    yanwen  
       2013-05-14 15:14:34 +08:00
    @xuelang 用了一下你的gist。。。貌似也是login 失败。。
    xuelang
        25
    xuelang  
    OP
       2013-05-14 16:45:52 +08:00
    @yanwen 我的可以登录上去啊(刚测的);不过短时间内多次登录会失败,可能服务器有限制。
    yanwen
        26
    yanwen  
       2013-05-14 19:59:56 +08:00
    还是不行。。也许是人品问题。。呃。。
    @xuelang

    http://bcs.duapp.com/picstore/CoUbLHaInI.jpg
    xuelang
        27
    xuelang  
    OP
       2013-05-14 22:15:06 +08:00
    @yanwen 没在win下试过。难道是user-agent的问题,你换成win下浏览器的user-agent试一下
    yanwen
        28
    yanwen  
       2013-05-14 22:23:53 +08:00
    @xuelang

    还是没搞明白到底是什么原因。。。。
    改了UA,依旧提示登陆失败。。
    yanwen
        29
    yanwen  
       2013-05-14 22:28:30 +08:00
    会不会是BS版本的问题??我装了两个BS版本。。一个是3的。。一个是4的。。是这个原因么?
    xuelang
        30
    xuelang  
    OP
       2013-05-14 22:31:11 +08:00
    @yanwen 把3卸了试试?
    yanwen
        31
    yanwen  
       2013-05-14 22:35:17 +08:00
    卸了BS3.2.1之后,还是不行。。没办法。mark一下。。改天有时间再弄。。
    xuelang
        32
    xuelang  
    OP
       2013-05-14 22:49:36 +08:00
    @yanwen 刚在win7下试了一下,可以正常登录。不知道怎么传图。。
    yanwen
        33
    yanwen  
       2013-05-14 23:51:23 +08:00
    @xuelang 直接粘贴图片的url地址就可以了。。
    yanwen
        35
    yanwen  
       2013-05-15 00:04:00 +08:00
    真奇怪。。等我重装py看看能不能解决。。真搓。。哎。。
    xieren58
        36
    xieren58  
       2013-05-17 12:24:10 +08:00
    怎么不用mechanize ?
    xuelang
        37
    xuelang  
    OP
       2013-05-17 12:55:10 +08:00
    @xieren58 不知道这个库呢,有空再看下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5103 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 01:13 PVG 09:13 LAX 17:13 JFK 20:13
    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