Hostloc论坛自动签到Python脚本

说明

  • 支持金钱显示
  • 支持多用户
  • 支持无服务器函数
  • 更新时间间隔

开始

安装 Python3

apt-get install python3-pip

新建一个名为hostloc.py的文件,然后在文件中写入以下代码
将其中的账号A替换成自己的,密码A也替换成自己的即可,多账号自行添加,注意前面的数字编号;
注意:不要用电脑的TXT记事本编辑,避免格式出错,直接在宝塔面板编辑即可;

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:  MoeClub.org

import re
import sys
import time
from urllib import request, parse
from http import cookiejar


account_dict = {
    '0': {'username': '账号A', 'password': '密码A'},
    '1': {'username': '账户B', 'password': '密码B'},
}


def Login(URL, UserData):
    _cookies = ''
    _cookie = cookiejar.CookieJar()
    _handler = request.HTTPCookieProcessor(_cookie)
    _req = request.Request(URL, data=parse.urlencode(UserData).encode('utf-8'))
    request.build_opener(_handler).open(_req)
    for cookie in _cookie:
        _cookies += cookie.name + '=' + cookie.value + ';'
    return _cookies


def GetPage(URL, Header_Cookies):
    _Header = {'Cookie': str(Header_Cookies)}
    _req = request.Request(URL, headers=_Header)
    return request.urlopen(_req).read().decode('utf-8')


def GetCredit(user_data, proto='https'):
    username = user_data['username']
    Login_URL = proto + '://hostloc.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1'
    My_Credit = proto + '://hostloc.com/home.php?mod=spacecp&ac=credit&showcredit=1&inajax=1'
    My_Home = proto + '://hostloc.com/home.php?mod=spacecp&inajax=1'
    My_Cookies = Login(Login_URL, user_data)

    if '<td>' + str(username) + '</td>' not in GetPage(My_Home, My_Cookies):
        print('[%s] Login Fail!' % username)
    else:
        try:
            CreditNum0 = str(re.findall('[0-9]+', GetPage(My_Credit, My_Cookies))[-1])
        except:
            CreditNum0 = 'Null'
        for x in range(25297, 25309):
            GetPage(proto + '://hostloc.com/space-uid-{}.html'.format(x), My_Cookies)
            time.sleep(4)
        try:
            if CreditNum0 == 'Null':
                raise Exception
            CreditNum1 = str(re.findall('[0-9]+', GetPage(My_Credit, My_Cookies))[-1])
            if CreditNum0 == CreditNum1:
                CreditDetails = str(CreditNum1)
            else:
                CreditDetails = str(CreditNum0) + '->' + str(CreditNum1)
        except:
            CreditDetails = 'Null'
        print('[%s] Login Success! (Credit: %s)' % (username, CreditDetails))


if __name__ == '__main__':
    if len(sys.argv) > 1:
        n = 0
        account_dict = {}
        account_list = [sys.argv[x] for x in range(1, len(sys.argv))]
        for account in account_list:
            if ":" not in account:
                continue
            account_dict[str(n)] = {}
            account_dict[str(n)]['username'] = str(str(account).split(":", 1)[0])
            account_dict[str(n)]['password'] = str(str(account).split(":", 1)[-1])
            n += 1
    for i in range(0, len(account_dict)):
        try:
            GetCredit(account_dict[str(i)])
            time.sleep(4)
        except:
            continue

创建自动执行签到任务

在宝塔面板自动任务创建一个Shell脚本自动计划任务
脚本内容:

# 进入hostloc.py文件所在目录的绝对路径
cd /home/Loc
# 执行签到任务
python3 ./hostloc.py

示例:

创建完成后点击执行,等待执行完成后查看日志,如果没有问题就可以了
提示:尽量将自动签到时间设定到半夜,白天论坛的CC防御规则严格,会使签到失败,设置在半夜就没问题了;
博主的签到日志:

----------------------------------------------------------------------------
★[2019-11-22 01:10:51] Successful
----------------------------------------------------------------------------
[xxx] Login Success! (Credit: 10669->10689)
[xxx] Login Success! (Credit: 2643->2663)
[xxx] Login Success! (Credit: 1105->1125)
----------------------------------------------------------------------------
★[2019-11-23 01:10:49] Successful
----------------------------------------------------------------------------
[xxx] Login Success! (Credit: 10692->10712)
[xxx] Login Success! (Credit: 2665->2685)
[xxx] Login Success! (Credit: 1127->1147)
----------------------------------------------------------------------------
★[2019-11-24 01:10:49] Successful
----------------------------------------------------------------------------
[xxx] Login Success! (Credit: 10722->10742)
[xxx] Login Success! (Credit: 2687->2707)
[xxx] Login Success! (Credit: 1149->1169)
----------------------------------------------------------------------------

发表评论

18 条评论

  1. 加油

    大佬这个是不是不支持中文用户名登录呢?

  2. 演奏

    现在设置 晚上 1点 2点 4点 全部 Login Fail! 是不是脚本失效了啊

  3. gejiba

    好像失效了 现在

  4. seele

    大佬,你好,我问一个问题
    我想在一个和hostloc很像的网站也自动签到(貌似模板一样的)
    这个脚本我给怎么改呢?
    https://bbs.52pcgame.net/
    这个是网址

  5. seele

    大佬,一直失败这是为什么,时间是早上一点半

    1. sunpma
      @seele

      我都是设置到半夜4点左右,目前没有问题

  6. mjj

    请问这个脚本失效了吗?为什么我执行后的日志只有一行如下,积分也没有增加:
    ★[2020-08-21 08:03:20] Successful
    ----------------------------------------------------------------------------

    1. sunpma
      @mjj

      尽量将自动签到时间设定到半夜,白天论坛的CC防御规则严格,会使签到失败

  7. 至尊宝

    这个脚本挂了,有时间间隔了,大佬什么时候更新一下⌇●﹏●⌇

    1. sunpma
      @至尊宝

      已更新时间间隔

      1. 至尊宝
        @sunpma

        OK,能正常签到了,3Q

  8. ATzzz

    大佬..加个 Server酱 sc.ftqq.com 微信推送 通知 可以不..

  9. 高达哥

    大佬,能否设置个间隔时间,假如账号多的话的,

    1. sunpma
      @高达哥

      已更新时间间隔

  10. 8888

    自动签到脚本

  11. locmjj

    大佬,按照你的方法在宝塔里面搭建了,但是日志提示 Login Fail!,换了台VPS也是一样,这个如何解决?

    1. sunpma
      @locmjj

      提示:尽量将自动签到时间设定到半夜,白天论坛的CC防御规则严格,会使签到失败,设置在半夜就没问题了;

      1. 戴志诚
        @sunpma

        大佬你好,请问这个怎么改成其他论坛的自动签到呢?
        也是dz论坛,但是只需要登陆进去访问签到网址就可以了