撸了个 V2EX 自动签到脚本 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
nivan
V2EX    分享创造

撸了个 V2EX 自动签到脚本

  •  1
     
  •   nivan 2016-05-17 19:28:50 +08:00 5739 次点击
    这是一个创建于 3484 天前的主题,其中的信息可能已经有所发展或是生改变。

    casperjs 写签到脚本真是简单直观!!! http://i-ai.org/v2ex-autosign/

    45 条回复    2016-05-26 10:30:16 +08:00
    ColinWei
        1
    ColinWei  
       2016-05-17 20:16:25 +08:00
    简单的同时 健壮性为 0
    atnoot
        2
    atnoot  
       2016-05-17 20:23:38 +08:00
    我也撸了个签到脚本
    atnoot
        3
    atnoot  
       2016-05-17 20:24:34 +08:00
    python 版的
    nivan
        4
    nivan  
    OP
       2016-05-17 20:31:52 +08:00
    @ColinWei 初学 casperjs,代码写的不好请多见谅!求分享稳定的 v 站签到脚本!学习学习!
    Gua
        5
    Gua  
       2016-05-17 20:38:54 +08:00
    30 秒了,链接都没打开~
    wex
        6
    wex  
       2016-05-17 20:47:11 +08:00
    @atnoot 你好,问下,为什么我可以登录成功,但是签到的时候提示:<div class="message" Onclick="$(this).slideUp('fast');">请重新点击一次以领取每日登录奖励</div>
    我是这样弄的: url = re.search(r'/mission/daily/redeem\?Once=\d+', login.text).group()
    url = 'http://v2ex.com' + url
    login = session.get(url, headers=header).text
    nivan
        7
    nivan  
    OP
       2016-0-17 20:49:05 +08:00
    @Gua 加了个 CDN ,比较费时的是 disqus 加载,看来国内还是用多说好!
    EchoWhale
        8
    EchoWhale  
       2016-05-17 23:28:52 +08:00   1
    ruby 写了一个,遇到意外签到不成功会发邮件提醒
    https://github.com/WunderEye/v2ex_auto_sign
    300
        9
    300  
       2016-05-17 23:42:14 +08:00 via Android
    我都是用 Chrome 的扩展。。。
    kevinroot
        10
    kevinroot  
       2016-05-17 23:54:56 +08:00
    你确定可以登录成功?
    casper.start('http://v2ex.com/signin', function() {
    this.fillSelectors('form[action="/signin"]', {
    'input[type="text"]': username,
    'input[type="password"]': password
    }, false);
    })
    我这里显示 v 大登录时候已经加了防 xss , input name 已经变成 64 位的十六进制了
    nivan
        11
    nivan  
    OP
       2016-05-18 06:31:56 +08:00
    @kevinroot 这里用到了 casperjs 1.1 的 api fillSelectors 根据 input 的 type 进行 填充
    zhangyi2099
        12
    zhangyi2099  
       2016-05-18 06:37:49 +08:00 via iPhone
    这是模拟浏览器登录吗?我记得我写的时候还要提取网页中 once 码
    nivan
        13
    nivan  
    OP
       2016-05-18 06:43:10 +08:00
    @zhangyi2099 对,casperjs 是基于 phantomjs 或者 SlimerJS,前者使用 WebKit,后者使用 Gecko
    nivan
        14
    nivan  
    OP
       2016-05-18 06:54:05 +08:00
    @EchoWhale 感谢分享! ruby 代码真是直观!
    liyvhg
        15
    liyvhg  
       2016-05-18 08:30:48 +08:00 via Android
    @winterbells 求扩展名
    atnoot
        16
    atnoot  
       2016-05-18 08:41:20 +08:00
    @wex github.com/davisqi/me.git 中 V2EX 可以参考一下
    weer0026
        17
    weer0026  
       2016-05-18 08:42:41 +08:00
    @EchoWhale ruby 大法好啊!
    EchoWhale
        18
    EchoWhale  
       2016-05-18 09:29:38 +08:00 via Android
    @weer0026 Ruby 虽好,不能当饭吃哦
    300
        19
    300  
       2016-05-18 09:48:40 +08:00 via Android   1
    weer0026
        20
    weer0026  
       2016-05-18 10:51:35 +08:00
    @EchoWhale 之前呆的日企倒是要求用 ruby ,可惜没学完就转去 php 了。
    EchoWhale
        21
    EchoWhale  
       2016-05-18 11:29:52 +08:00
    @weer0026 还是对 Ruby 念念不忘吧?(*^__^*)
    写起来真的很舒服,对人脑太友好了
    wq2016
        22
    wq2016  
       2016-05-18 14:29:16 +08:00
    我是用 CasperJS 写的
    inmyfree
        23
    inmyfree  
       2016-05-18 14:55:13 +08:00
    前天快 200 天刚断了。。。
    gogobody
        24
    gogobody  
       2016-05-18 15:11:50 +08:00 via Android
    @atnoot 求 python 版分享!
    bearqq
        25
    bearqq  
       2016-05-18 16:11:44 +08:00
    @gogobody python , 2.7 依赖 mechanize 。

    """
    def make_br():
    br = mechanize.Browser(history=NoHistory())
    #cj = cookielib.LWPCookieJar()
    #br.set_cookiejar(cj)
    br.set_handle_equiv(True)
    br.set_handle_gzip(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)

    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
    br.set_debug_http(False)
    br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0')]
    #br.set_proxies({"http":"username:[email protected]:8888"})
    return br

    class v2ex(object):
    def __init__(self,v2expara,useproxy=0,proxyaddr='http://127.0.0.1:8580'):
    self.name='v2ex'
    self.br=make_br()
    self.v2expara=v2expara #('name','pass')

    def sign(self):
    br=self.br
    br.open('signin')
    #for f in br.forms():
    br.select_form(nr=1)

    for i in br.form.__dict__['controls']:
    #print i.name,i.type
    if i.type=='text':
    br.form[i.name]=self.v2expara[0]
    elif i.type=='password':
    br.form[i.name]=self.v2expara[1]
    br.submit()

    br.open('mission/daily')
    if u'每日登录奖励已领取' in br.response().read():
    return 1
    else:
    br.open(re.search(r'/mission/daily/redeem\?Once=\d+', br.response().read()).group())
    if u'请重新点击一次以领取每日登录' in response:
    return 0
    elif br.response().read():
    return 1
    return 0
    """
    bearqq
        26
    bearqq  
       2016-05-18 16:15:03 +08:00
    suspended
        27
    suspended  
       2016-05-18 16:38:12 +08:00   1
    @EchoWhale 不能这么说吧。去年做了个 300K 的小项目(一个数据归档系统),除了直接和磁带机打交道的部分是 C ,其余的执行器,调度,空间管理,管理界面,全部都是用 ruby 写的。
    EchoWhale
        28
    EchoWhale  
       2016-05-18 17:56:38 +08:00
    @suspended 个人开发者?那的确可以选任何语言。或者你能影响到公司新项目采用的技术栈。
    ruby 的就业范围很窄是个不争的事实,所以我才说 Ruby 不能当饭吃
    atnoot
        29
    atnoot  
       2016-05-18 19:22:07 +08:00
    @gogobody github.com/davisqi/me.git 中 V2EX 可以参考一下
    audi
        30
    audi  
       2016-05-18 19:22:30 +08:00   1
    签到有什么用
    xiaomayi0323
        31
    xiaomayi0323  
       2016-05-18 23:42:50 +08:00
    @atnoot Python 版的来一发
    gogobody
        32
    gogobody  
       2016-05-19 08:27:27 +08:00 via Android
    gogobody
        33
    gogobody  
       2016-05-19 08:27:49 +08:00 via Android
    @bearqq @atnoot 感谢 2 位!
    Clarencep
        34
    Clarencep  
       2016-05-19 09:21:24 +08:00
    @wex 你也遇到啦~ 原来不是我一个人遇到这个问题 我还以为出现幻觉了,后来就没再遇到过
    suspended
        35
    suspended  
       2016-05-19 11:06:18 +08:00
    @EchoWhale 国内不流行 Ruby ,哪怕在国外似乎也都局限于 Rails? 蛮可惜的。我个人从没用过 Rails 。
    shulen
        36
    shulen  
       2016-05-20 08:35:52 +08:00
    https://github.com/ForestCho/node-v2ex 之前也弄过一个,现在还挂着签到
    nivan
        37
    nivan  
    OP
       2016-05-20 10:11:12 +08:00
    @shulen 谢谢分享!
    v2ex.js
    62: console.log('登录中...\n 此过程你有被封 IP 的危险...');
    话说 v 站会封 IP 的吗?
    shulen
        38
    shulen  
       2016-05-20 13:05:38 +08:00
    @nivan 多次错误登录会封 ip
    nivan
        39
    nivan  
    OP
       2016-05-20 14:55:59 +08:00
    @shulen 哦~好像很厉害,试试去.
    nivan
        40
    nivan  
    OP
       2016-05-20 15:04:22 +08:00
    @shulen 试了下!!!封 172800 秒
    shulen
        41
    shulen  
       2016-05-20 17:08:54 +08:00
    @nivan 哭去吧
        42
    moogle  
       2016-05-25 14:37:52 +08:00
    @atnoot
    请问 balance 是一个字符串,这里跑出异常,该如何处理?
    if balance not in result:
    TypeError: a bytes-like object is required, not 'str'
    atnoot
        43
    atnoot  
       2016-05-25 19:52:03 +08:00
    @mgoole 你可以把 balance 内容打印出来,看一下。或者参看楼上代码,自行修改。
    moogle
        44
    moogle  
       2016-05-26 00:02:01 +08:00
    @atnoot 初学,犯很多错误。
    result = s.get(url2, headers=headers).content
    balance = "location.href = '/balance'"
    我之前是用 python3 运行,所以 result 是 byte 。改为用 python2 运行, result 是字符串,这样就正常了。
    从 if balance not in result:还是有很多内容没看懂:
    1 、 location.href = '/balance'的用途。
    2 、 misurl 的用途
    atnoot
        45
    atnoot  
       2016-05-26 10:30:16 +08:00
    @moogle misurl 这个其实是抓取 location.href = '/mission/daily/redeem?Once=\d+'的信息,现在看看也没必要 直接可以在内容里搜索就可以。/balance 这个主要是判断是否出现这个 url ,如果出现了 就表示签到成功了,没有签到,后面就进行签到的步骤。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5128 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 09:26 PVG 17:26 LAX 01:26 JFK 04:26
    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