1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          寶塔部署Hostloc論壇自動簽到Python腳本

          來源:互聯網轉載 時間:2024-01-29 07:46:21

          冬冬一直用的騰訊云函數來保持Hostloc論壇的簽到,但是最近騰訊云函數開始收費了,最低9塊錢一個月,本著能省就省的原則,我們以Python的方式來保持簽到。

          開始

          下載源碼(兩種方式,自由選擇)

          • 下載到本地進行修改

          瀏覽器輸入https://github.com/DocWho22/hostloc_getPoints/blob/main/hostloc_auto_get_points.py直接進行下載,然后在本地修改好用戶米,密碼和Server醬SendKey之后再上傳服務器。

          • 直接下載到服務器

          SSH命令行下載:

          wget -p /root/hostloc https://raw.githubusercontent.com/DocWho22/hostloc_getPoints/main/hostloc_auto_get_points.py

          寶塔界面下載:

          選擇左側菜單欄,找到文件菜單,點進去之后,選擇root目錄(隨意,自己記住文件的位置就行,演示用root目錄),然后點擊遠程下載,輸入文件地址https://github.com/DocWho22/hostloc_getPoints/blob/main/hostloc_auto_get_points.py

          進行下載。(為方便記憶,把源文件hostloc_auto_get_points.py重命名為loc.py)

          這里附上源代碼:

          import osimport timeimport randomimport reimport textwrapimport requestsfrom pyaes import AESModeOfOperationCBCfrom requests import Session as req_Session# 隨機生成用戶空間鏈接def randomly_gen_uspace_url() -> list:    url_list = []    # 訪問小黑屋用戶空間不會獲得積分、生成的隨機數可能會重復,這里多生成兩個鏈接用作冗余    for i in range(12):        uid = random.randint(10000, 50000)        url = "https://hostloc.com/space-uid-{}.html".format(str(uid))        url_list.append(url)    return url_list# 使用Python實現防CC驗證頁面中JS寫的的toNumbers函數def toNumbers(secret: str) -> list:    text = []    for value in textwrap.wrap(secret, 2):        text.append(int(value, 16))    return text# 不帶Cookies訪問論壇首頁,檢查是否開啟了防CC機制,將開啟狀態、AES計算所需的參數全部放在一個字典中返回def check_anti_cc() -> dict:    result_dict = {}    headers = {        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"    }    home_page = "https://hostloc.com/forum.php"    res = requests.get(home_page, headers=headers)    aes_keys = re.findall('toNumbers("(.*?)")', res.text)    cookie_name = re.findall('cookie="(.*?)="', res.text)    if len(aes_keys) != 0:  # 開啟了防CC機制        print("檢測到防 CC 機制開啟!")        printLog("檢測到防 CC 機制開啟!")        if len(aes_keys) != 3 or len(cookie_name) != 1:  # 正則表達式匹配到了參數,但是參數個數不對(不正常的情況)            result_dict["ok"] = 0        else:  # 匹配正常時將參數存到result_dict中            result_dict["ok"] = 1            result_dict["cookie_name"] = cookie_name[0]            result_dict["a"] = aes_keys[0]            result_dict["b"] = aes_keys[1]            result_dict["c"] = aes_keys[2]    else:        pass    return result_dict# 在開啟了防CC機制時使用獲取到的數據進行AES解密計算生成一條Cookie(未開啟防CC機制時返回空Cookies)def gen_anti_cc_cookies() -> dict:    cookies = {}    anti_cc_status = check_anti_cc()    if anti_cc_status:  # 不為空,代表開啟了防CC機制        if anti_cc_status["ok"] == 0:            print("防 CC 驗證過程所需參數不符合要求,頁面可能存在錯誤!")            printLog("防 CC 驗證過程所需參數不符合要求,頁面可能存在錯誤!")        else:  # 使用獲取到的三個值進行AES Cipher-Block Chaining解密計算以生成特定的Cookie值用于通過防CC驗證            print("自動模擬計嘗試通過防 CC 驗證")            printLog("自動模擬計嘗試通過防 CC 驗證")            a = bytes(toNumbers(anti_cc_status["a"]))            b = bytes(toNumbers(anti_cc_status["b"]))            c = bytes(toNumbers(anti_cc_status["c"]))            cbc_mode = AESModeOfOperationCBC(a, b)            result = cbc_mode.decrypt(c)            name = anti_cc_status["cookie_name"]            cookies[name] = result.hex()    else:        pass    return cookies# 登錄帳戶def login(username: str, password: str) -> req_Session:    headers = {        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",        "origin": "https://hostloc.com",        "referer": "https://hostloc.com/forum.php",    }    login_url = "https://hostloc.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1"    login_data = {        "fastloginfield": "username",        "username": username,        "password": password,        "quickforward": "yes",        "handlekey": "ls",    }    s = req_Session()    s.headers.update(headers)    s.cookies.update(gen_anti_cc_cookies())    res = s.post(url=login_url, data=login_data)    res.raise_for_status()    return s# 通過抓取用戶設置頁面的標題檢查是否登錄成功def check_login_status(s: req_Session, number_c: int) -> bool:    test_url = "https://hostloc.com/home.php?mod=spacecp"    res = s.get(test_url)    res.raise_for_status()    res.encoding = "utf-8"    test_title = re.findall("<title>(.*?)</title>", res.text)    if len(test_title) != 0:  # 確保正則匹配到了內容,防止出現數組索引越界的情況        if test_title[0] != "個人資料 -  全球主機交流論壇 -  Powered by Discuz!":            print("第", number_c, "個帳戶登錄失敗!")            printLog("第" + str(number_c) + "個帳戶登錄失敗!")            return False        else:            print("第", number_c, "個帳戶登錄成功!")            printLog("第" + str(number_c) + "個帳戶登錄成功!")            return True    else:        print("無法在用戶設置頁面找到標題,該頁面存在錯誤或被防 CC 機制攔截!")        return False# 抓取并打印輸出帳戶當前積分def print_current_points(s: req_Session):    test_url = "https://hostloc.com/forum.php"    res = s.get(test_url)    res.raise_for_status()    res.encoding = "utf-8"    points = re.findall("積分: (d+)", res.text)    if len(points) != 0:  # 確保正則匹配到了內容,防止出現數組索引越界的情況        print("帳戶當前積分:" + points[0])        printLog("帳戶當前積分:" + points[0])    else:        print("無法獲取帳戶積分,可能頁面存在錯誤或者未登錄!")        printLog("無法獲取帳戶積分,可能頁面存在錯誤或者未登錄!")    time.sleep(5)# 依次訪問隨機生成的用戶空間鏈接獲取積分def get_points(s: req_Session, number_c: int):    if check_login_status(s, number_c):        print_current_points(s)  # 打印帳戶當前積分        url_list = randomly_gen_uspace_url()        # 依次訪問用戶空間鏈接獲取積分,出現錯誤時不中斷程序繼續嘗試訪問下一個鏈接        for i in range(len(url_list)):            url = url_list[i]            try:                res = s.get(url)                res.raise_for_status()                print("第", i + 1, "個用戶空間鏈接訪問成功")                printLog("第" + str(i + 1) + "個用戶空間鏈接訪問成功")                time.sleep(5)  # 每訪問一個鏈接后休眠5秒,以避免觸發論壇的防CC機制            except Exception as e:                print("鏈接訪問異常:" + str(e))                printLog("鏈接訪問異常:" + str(e))            continue        print_current_points(s)  # 再次打印帳戶當前積分    else:        print("請檢查你的帳戶是否正確!")        printLog("請檢查你的帳戶是否正確!")# 打印輸出當前ip地址def print_my_ip():    api_url = "https://api.ipify.org/"    try:        res = requests.get(url=api_url)        res.raise_for_status()        res.encoding = "utf-8"        print("當前使用 ip 地址:" + res.text)        printLog("當前使用 ip 地址:" + res.text)    except Exception as e:        print("獲取當前 ip 地址失敗:" + str(e))        printLog("獲取當前 ip 地址失敗:" + str(e))# serverChan推送信息def sendMessage(serverChan: str, messageTitle: str, messageContent: list):    """    :type messageContent: list[str]    """    api = "https://sctapi.ftqq.com/%s.send" % serverChan    title = messageTitle    content = "n".join(messageContent)    data = {        "text": title,        "desp": content    }    req = requests.post(api, data=data)# 輸出log到messageContentdef printLog(log: str):    messageContent.append(log)if __name__ == "__main__":    username = "在此填入用戶名"    password = "在此填入密碼"    serverChan = "在此填入Server醬SendKey"    messageTitle = "hostloc簽到"    messageContent = []    # username = os.environ["HOSTLOC_USERNAME"]    # password = os.environ["HOSTLOC_PASSWORD"]    # 賬戶和密碼    # 分割用戶名和密碼為列表    user_list = username.split(",")    passwd_list = password.split(",")    if not username or not password:        printLog("未檢測到用戶名或密碼,請檢查環境變量是否設置正確!")        print("未檢測到用戶名或密碼,請檢查環境變量是否設置正確!")    elif len(user_list) != len(passwd_list):        printLog("用戶名與密碼個數不匹配,請檢查環境變量設置是否錯漏!")        print("用戶名與密碼個數不匹配,請檢查環境變量設置是否錯漏!")    else:        print_my_ip()        print("共檢測到", len(user_list), "個帳戶,開始獲取積分")        print("*" * 30)        printLog("共檢測到" + str(len(user_list)) + "個帳戶,開始獲取積分")        printLog("*" * 30)        # 依次登錄帳戶獲取積分,出現錯誤時不中斷程序繼續嘗試下一個帳戶        for i in range(len(user_list)):            try:                s = login(user_list[i], passwd_list[i])                get_points(s, i + 1)                print("*" * 30)                printLog("*" * 30)            except Exception as e:                print("程序執行異常:" + str(e))                print("*" * 30)                printLog("程序執行異常:" + str(e))                printLog("*" * 30)            continue        print("程序執行完畢,獲取積分過程結束")        printLog("程序執行完畢,獲取積分過程結束")        sendMessage(serverChan, messageTitle, messageContent)

          補充賬號信息和Server醬SendKey

          打開下載好的源代碼,如果你是本地編輯,請用文本編輯工具來打開它,不要用電腦的TXT記事本編輯!

          在文件的209-211行,填入自己的Hostloc的用戶名和密碼和Server醬SendKey。

          如果你有多個賬戶,請用英文逗號分割開。

          多賬戶示例:

          username = "username1,username2"password = "password1,password2"

          Server醬SendKey如何你沒有,可以去https://sct.ftqq.com/申請,微信掃碼注冊,在https://sct.ftqq.com/sendkey查看復制自己的SendKey。

          編輯完自己的賬號信息和SendKey之后,保存,更改名字為loc.py并上傳到/root/目錄下(演示用,名字改不改都可以,隨便哪個文件夾,自己記住就行)。

          服務器環境配置

          此腳本用到Python3,所以我們要在服務器里安裝Python3

          apt-get install python3-pip

          安裝完后之后,就可以運行了

          python3 loc.py

          如果運行后提示以下錯誤,請安裝request模塊

          root@debian:~# python3 loc.pyTraceback (most recent call last):  File "/root/loc.py", line 6, in <module>    import requestsModuleNotFoundError: No module named 'requests'

          安裝request模塊

          pip3 install requests

          安裝完request模塊之后再次運行python3 loc.py ,如果沒有報錯,會看到運行日志

          root@debian:~# python3 loc.py當前使用 ip 地址:152.67.x.x共檢測到 1 個帳戶,開始獲取積分******************************

          如果再次報錯,請安裝pyaes模塊

          Traceback (most recent call last):  File "/root/loc.py", line 8, in <module>    from pyaes import AESModeOfOperationCBCModuleNotFoundError: No module named 'pyaes'

          安裝pyaes模塊

          pip3 install pyaes

          安裝完成之后再次運行python3 loc.py ,直至沒有報錯,缺什么模塊安裝什么模塊。

          創建寶塔自動執行簽到任務

          在寶塔面板左側菜單欄,找到計劃任務,然后添加shell腳本任務并保存。

          腳本內容:

          # 進入loc.py文件所在目錄的絕對路徑,自己的在哪就寫哪里,演示用是root目錄cd /root/# 執行簽到任務python3 ./loc.py

          請盡量選擇在夜間簽到,Hostloc白天防火墻規則嚴格,密集請求會被當做CC攻擊,容易被金盾防火墻屏蔽,導致簽到失敗。

          等待簽到完成之后,可以自己在后臺查看任務執行日志。

          日志

          微信Server醬提醒:

          服務器計劃任務運行日志:

          如果你沒有用寶塔面板,請在SSH后臺添加crontab任務

          新建crontab任務

          crontab -e

          添加(解釋:每天2點10分執行python3 /root/loc.py)

          10 2 * * * sleep 5;python3 /root/loc.py

          同樣達到每天自動簽到的效果。

          crontab表達式:

          *    *    *    *    *    -    -    -    -    -    |    |    |    |    |    |    |    |    |    +----- 星期幾 (0 - 7) (Sunday=0 or 7)|    |    |    +---------- 月份 (1 - 12)|    |    +--------------- 幾號 (1 - 31)|    +-------------------- 小時 (0 - 23)+------------------------- 分鐘 (0 - 59)

          總結

          如果這樣的方式你覺得麻煩,還可以在瀏覽器上安裝油猴腳本,同樣可以實現自動簽到,缺點是每天都要打開瀏覽器。

          油猴腳本地址:https://greasyfork.org/zh-CN/scripts/40444-hostloc-checkin

          這樣每天我們就可以獲得Hostloc的20積分,祝大家早日上神仙。

          感謝@Jox2018 @DocWho22 等MJJ提供的代碼。

          隨著Github Actions的大規模封殺以及騰訊云云函數開始收費,免費用的資源越來越少,且行且珍惜,希望大家避免濫用。

          標簽:hostloc-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          echo off是什么語言?Echo off不是語言,是Dos命令行,意思是關閉Echo。bat批處理腳本中經常使用Echo。該命令的功能是顯示信息或回應命令開或關。簡單地說,有兩種用途,:。第一種用法是直接輸出字符串,比如在DOS終端輸入echo 123456,執行回車后,終端屏幕上會顯示字符串123456。該函數通常用于提示用戶或調試腳本。第二種用法是關閉后續命令的回顯。比如在DOS終端輸入命...

          詳細介紹巴西柔術?來源:巴西柔術起源于1914年,由日本柔術藝術家前田江井傳入巴西。前田宏生于1878年,1897年成為日本柔道創始人菅野智五郎的學生。他因擅長格斗技巧而被稱為“格斗伯爵”。1904年,前田宏離開日本,周游世界,表演和宣傳武術,接受來自世界各地的挑戰,包括拳擊手、摔跤手、原始摔跤手等。1914年來到巴西后,前田結識了一位名叫加斯托格雷西的朋友。加斯托格雷西是一位著名的商人,他去過北...

          正能量的歌一直深得人心汪峰-《英雄》北京國安球隊隊歌,聽見這首歌情況下你是不是覺得心潮澎湃?是不是有一種想要去開辟大場面的想法?也許和平時期獲得一場比賽也是英雄。國安隊歌歌詞誰知道???漢化版綠茵場上叫喊著姓名 翠綠色影子也是我們的大牌明星 向著未來 噢 朝著全球 去拼搏大家憧憬的殊榮 獲勝始終屬于你 北京國安永遠爭第一 喔噢…… 北京國安 我們永遠支持你 噢…… 北京國安 大家永遠熱愛你 綠茵場上...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>