2026年1月1日星期四

做了个出海关键词的网站|无比期待2026年

在2025年的最后一夜启航

这是熊猫的第310篇原创



大家好,我是熊猫。

有段时间没写长文了。

趁这周有空,聊聊2026年想做的事情。


昨天写了这篇文章,把公众号名字改了,准备all-in出海。

为什么「熊猫搞钱记」会开始变成负担?




这段时间我把过去这一年多发表公众号上的文章全部看了一遍。



把我正在做的事情梳理了下,总结起来就是我在做的是一个分享出海项目的事情。


既然如此,社群里面沉淀下来的出海项目信息,就需要有一个社区产品沉淀下来,这样对于后进群的朋友比较友好,没找到什么特别适合的产品,于是做了一个社区官网。



网站地址:keywords.cafe



目前已经完成了部分内容的搭建,有200多个关键词,其他功能,后续再逐步补充。


后续准备把在社群分享的内容,过段时间全部更新到网站上,争取做到月更。



感兴趣的朋友可以关注看看。


关键词挖掘


网站为什么叫keywords,主要是觉得每个关键词,背后对应的就是具体的项目,简单明了。


在过去的一年中,写过一些找词的方法:


一些找词的方法

发现了3个新词|不太好做是常态

分享一个找游戏关键词的"笨"方法|以Color Block Jam为例


也密集的分享过一些有价值的关键词,无论是免费文章还是付费解锁。


聊聊生图关键词3&一个月访问量30万的网站|还得搞AI

分享一个游戏站关键词#014

Gemini的一种新玩法|还得搞AI

分享一个游戏站关键词#012|从丝之歌说起


关于找词&筛选,有一套方法论。

更重要的是,我对挖掘关键词/项目有极大的乐趣。


社群

关于社群,写过两篇:

关于「付费产品研究及开发」社群
社群运营一个月|下一步的计划

最近一篇是今年3月份,到现在也9个多月了,一直没有一个更新的介绍,以后准备介绍就是:社群分享的内容,可以去看 keywords.cafe。

过去这2个月,一直在控制社群的人数,会担心因为时间不够影响交付质量(虽然交付是1年)。

到如今,和别人合作的项目都结束了,26年专心做我自己的项目,也就是所谓的一人公司,花在社群上的时间,会多很多。

社群也该迭代了。

社群是筛选后的信息源。

如果不分享主流市场的信息,而只分享小众信息,那么关于主流市场上的机会,也就故意放弃了。


为什么不在一个水大鱼大的市场来竞争呢?


社群也是一个产品,也需要不断迭代。

熊猫,公众号:熊猫搞钱记社群运营一个月|下一步的计划

也准备扩充下人员了。
搞个小活动,在2026年1月31日24:00之前加入社群打6折,后续恢复原价。

能获得什么:
2026年有248个工作日,至少会分享248个出海项目的关键词。
可能是大众的项目,也有一些小众的项目。
主要是项目预期收益高低的区别。

如此能对项目有一个合理的预期,才能决定投入多少资源。

在这过程之中,一边挖掘项目,一边做项目。
直到项目逐渐成功。

一人公司

再说说一人公司。

我觉得最重要的还是做业务能力,不管是达成交易,还是把一个一个的闭环从0到1跑通,从1到100扩散。
需要Close the deal, Make things done,然后把钱收下,长期经营。

在做的具体业务,我后续会写文章逐一说明,有些是我个人的,有一些是和好友一起合作。

关于合作

AI在2025年,让技术平权了一些,虽然现在AI很强,下一步肯定更强,但是我仍然觉得要做更大的事情,还是需要更多的人。

因此在2026年除了会自己做一些出海项目之外,如果有合适的项目,双方对于参与的时间节奏、收益预期都比较匹配,也不排除任何合作的可能性。

图片

让Gemini做了一个网站的icon,有海浪,有灯塔,灯塔作为keywords中"K"的一部分,还有光。
于是远航开始了。

今天就先写到这。
祝你的项目在2026年也能成功!

欢迎交流可行的项目,也欢迎加入付费社群一起探索。
有兴趣的朋友可以加我微信。
图片

2025 年 Web3 行业热点叙事大盘点:12 个月 12 个风口,看懂热钱流向哪、市场注意力都在哪!

复盘是为了让我们走得更远

图片
引言:
Web3行业发展太快了,每天都有新事物出现。因此,很多日常思考值得被记录下来。
这些思考会实时更新在推特账号中,并定期汇总发布在微信公众号。
欢迎关注我的推特账号:岳小鱼(ID:@yuexiaoyu111)。

图片


图片
··················Start··················


复盘是为了让我们在未来走得更远。

2025年结束了,我们今天就来盘一盘这一年Web3行业的热点,看看你抓住了哪些、又在哪些地方栽了跟头亏了钱。

图片

1️⃣ meme币的巅峰

先看1月,1月最大热点绝对是Meme币,核心就是特朗普发币,直接把Meme币叙事推到了高潮。

1月18号,特朗普在就职前两天官宣发TRUMP币,最高冲到近800亿美元的市值。

高潮过后就是下坡路。

紧接着第二天,梅拉尼娅也发了MELANIA币,TRUMP币几小时内直接跌了38%,市场流动性开始被疯狂分流。

再后来阿根廷总统米莱也跟风发币,彻底把市场最后一点流动性都榨干了。

这波下来,Meme币这个热门叙事,基本就走到头了。

所以后边可以看到,meme币赛道非常凉,只是偶有热点。

2️⃣ U卡热潮

2月份的热点,就轮到了U卡,也就是Crypto Card。

当时很多项目都在做这个,最火的就是Infini Card。

它搞了个很牛的模式:你把稳定币充进去,它会自动把你的钱放到链上协议去理财,余额能自动生息。

这对用户和平台来说,吸引力都很大。

但高收益背后,风险也更大,显著增大了风险敞口。

就在2月,Infini Card出了大事,内部员工监守自盗,平台直接亏了5000万美元,项目一下就停了,整个U卡赛道也被狠狠冲击了一把。

不过市场需求还在,后来又冒出来很多U卡项目,目前主要是是财大气粗的交易所占据了U卡市场。

3️⃣ DEX市场格局重塑

3月份的热点,轮到了DEX,也就是去中心化交易所。

这个热点其实是从2月的一个大事件衍生出来的。

2月的时候,Bybit交易所被盗,金额达到15亿美元。

更关键的是,黑客用OKX的DEX来洗钱,结果OKX DEX因为合规问题被暂停服务了。

头部平台一停,市场马上就空出一大块。

这时候,GMGN和Axiom这些新生代的链上交易工具就抓住机会,疯狂抢市场份额。

4️⃣ PayFi开启

4月份的热点轮到了PayFi(支付金融),核心龙头就是横空出世的Huma Finance。

这项目创始团队全是Web2金融科技老兵,有前Facebook、Google Fi的核心成员,早就摸透了跨境支付的痛点。

他们把区块链技术和传统金融需求结合,搞了个新颖的模式:

用户在链上存稳定币,平台会把这些资金借给有融资需求的传统支付机构,相当于打通了链上资金端和线下支付场景。

更关键的是,它的收益不依赖代币激励,而是来自真实跨境贸易的贷款利差,年化能到10%-20%,还吸引了Solana基金会等机构投了几千万美元。

这种现实资产+链上金融的叙事挺有叙事空间的,直接点燃了整个行业对PayFi的热情,让PayFi成了当时最火的新赛道。

5️⃣ RWA热潮起点

5月份的热点,是彻底引爆行业的RWA(现实世界资产代币化),而点燃这把火的,正是全球资管巨头贝莱德(BlackRock)。

它的代币化货币市场基金BUIDL在5月迎来爆发,链上规模直接冲到近300亿美元。

核心就是投资短期美国国债,还能7×24小时申购赎回,资金效率远超传统基金。

最顶流的传统金融巨头下场,直接起到了示范效应。

高盛、富兰克林邓普顿等机构纷纷跟进布局RWA,原本小众的赛道瞬间成了主流焦点。

所以说,2025年5月,完全能算作RWA热潮的真正起点。

6️⃣ 稳定币的里程碑

6月份的热点是稳定币,核心事件是全球最大合规稳定币USDC的母公司Circle在美股上市,这是行业标志性事件。

Circle上市后创造巨大财富效应,股价从70美元涨至400多美元,涨幅接近7倍,吸引大量关注。

这一事件也对东方市场产生重大影响,尤其是中国内地企业开始关注稳定币。

同时,香港正在加紧推出稳定币条例,许多内地企业开始到香港寻求稳定币机会,相关概念受到炒作。

我自己也观察到身边很多人开始咨询稳定币相关信息。

7️⃣ 稳定币支付产业链扩张

7月份是稳定币热潮的延续,但市场关注点从发币转向了支付。

大家发现,稳定币最大的使用场景其实是支付,特别是跨境支付。

很多内地的支付公司开始加速布局稳定币支付业务。

虽然当时香港的稳定币牌照还没正式发下来,但整个产业链已经提前动起来了。

像律所、技术服务商、合规顾问这些基础服务商,都在疯狂招人、快速推进,准备抢占先机。

8️⃣ DAT热潮

8月份的热点是DAT(Digital Asset Treasury,数字财库),简单说就是上市公司把加密资产当成核心财库配置,这股风完全是被微策略带起来的。

微策略早就靠"发股买比特币"的模式左脚踩右脚、螺旋升天。

看到这波财富效应,一大堆上市公司跟风进场。

比特币这边还是微策略独领风骚,但以太坊赛道冒出了狠角色,Bitmine。

这家美股上市公司1个月内就疯狂扫货,最终持仓83万多枚以太坊,市值超29亿美元,成了全球最大的以太坊持有企业。

就连特朗普传媒都跟着凑热,拿23.2亿美元募资建比特币储备,整个数字财库赛道彻底火了。

9️⃣ Perp DEX 热潮

9月份的热点是Perp DEX(链上合约交易平台),这波热潮的核心推手是Aster,而背后撑腰的正是币安和CZ本人直接下场喊单扶持。

这一切的导火索是Hyperliquid的爆发,它把中心化交易所的订单簿模式搬到链上。

2025年未平仓合约规模暴涨479%,硬生生从币安、OKX等头部平台抢下超10%的永续合约市场份额。

眼看链上合约赛道被 Hyperliquid 抢占,币安再也按捺不住,直接扶持Aster对标竞争,本质就是通过代理人战争打乱对手节奏。

Aster也没让人失望,靠着隐藏订单、零Gas费等优势,再加上币安的流量加持,一度远超Hyperliquid同期的46亿美元,财富效应拉满。

跟着这股风,Lighter、EdgeX等一大批链上合约平台蜂拥而至,整个PopDEX赛道彻底被引爆。

1️⃣0️⃣ x402打通AI支付

10月份的热点是X402协议,虽然热度短暂但意义重大,直接打通了Web3和AI的支付闭环。

今年前几个月的主旋律是稳定币和支付,而X402则是由Coinbase主导、Cloudflare等巨头联合推动的底层协议标准,核心就是激活了闲置30年的HTTP 402状态码。

它专门解决AI Agent的高频小额支付痛点,让AI能自主完成付费,不用人工干预,比如花几分钱调用数据API、解锁一篇研究论文,全程无缝结算。

更关键的是它门槛极低,开发者一行代码就能集成,还支持USDC等稳定币跨链支付,短短一个月链上交易量就暴涨20倍。

这一下就点燃了市场热情,不仅谷歌、Visa等巨头纷纷合作,PayAI、Questflow等相关项目也跟着走红,算是给AI原生经济搭好了支付地基。

1️⃣1️⃣ 预测市场的价值再发现

11月份的热点是预测市场,核心引爆点就是老牌项目Polymarket的价值再发现。

这个三四年前就存在的平台,2024年美国大选时靠精准预测特朗普当选一战成名,而11月前后的大额融资直接把热度推到顶峰。

纽约证券交易所母公司洲际交易所砸了20亿美元投资,让它的投后估值冲到90亿美元,创始人也成了最年轻的白手起家亿万富翁。

头部项目的财富效应一出来,赛道瞬间沸腾。

币安生态的Opinion、最早发币的Limitless等一众平台纷纷冒头,形成扎堆效应。

大家这才猛然发现,预测市场能把区块链和现实世界的事件(政治、经济、体育等)深度绑定。

既解决了信息不对称的痛点,又能创造真实价值,算是链上与现实融合的绝佳赛道,也让这个沉寂多年的领域迎来了真正的爆发。

1️⃣2️⃣ 美股代币大战

12月份的热点是美股代币,这和今年大火的RWA(现实世界资产代币化)是延续关系。

毕竟"万物上链"的浪潮里,美股这种标准资产上链,本就是RWA第一阶段的核心方向。

美股代币其实早有热度,但12月能引爆全场,关键是币安钱包直接集成了Ondo的美股代币。

作为头部平台,币安的示范效应太顶了,直接倒逼各大交易所加紧布局,一下把赛道热度拉满。

更重要的是,美股代币是真能解决痛点:很多国家和地区的人想开美股账户难如登天。

而现在靠加密钱包,用稳定币就能直接买美股代币,还能享受秒级结算、跨地域无障碍交易的优势。

这种把美股装进钱包的便捷性,不仅让普通投资者受益,更给RWA热潮添了把猛火,让资产上链从概念真正落地到了用户需求里。

总结一下

很多人说现在币圈没了新叙事,但回顾2025一整年就会发现,热点从未断档。

从1月的Meme币高潮,到12月的美股代币爆发,每个月都有让人眼前一亮的新方向。

但这一年最核心的变化,不是热点的轮番更替,而是Crypto行业彻底告别了自娱自乐,加速与现实世界深度融合。

RWA、稳定币支付、DAT、x402、预测市场这些热点不再是虚无的概念炒作,而是真能解决痛点、创造实际价值的落地应用。

全球监管的完善,传统金融巨头的跑步入场,更给这种融合增加了新的发展动力。

现在的Web3,早已不是孤立的数字生态,而是在重塑支付体系、升级资产交易、优化现实服务的过程中,成为现实金融系统的重要补充。

所以不用纠结有没有新叙事,因为与现实融合就是最大的长期叙事。

这个趋势还在加速,未来只会有更多能改变现实世界的应用出现,值得我们继续保持期待!


图片
··················END··················


更多思考,欢迎关注我的推特账号:岳小鱼(ID:@yuexiaoyu111)。


图片

望京网任务脚本

1.购买服务器阿里云:服务器购买地址https://t.aliyun.com/U/55RK8C若失效,可用地址

1.购买服务器

阿里云:

服务器购买地址

https://t.aliyun.com/U/55RK8C

若失效,可用地址

https://www.aliyun.com/daily-act/ecs/activity_selection?source=5176.29345612&userCode=49hts92d

腾讯云:

https://curl.qcloud.com/wJpWmSfU

若失效,可用地址

https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console

华为云

https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905

2.部署教程

2024年最新青龙面板跑脚本教程(一)持续更新中

3.代码如下

# -*- coding: utf-8 -*-

import osimport reimport timeimport jsonimport tracebackfrom dataclasses import dataclassfrom typing import OptionalListTuple
import requestsfrom lxml import etree
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC
try:    # 自动管理 chromedriver    from webdriver_manager.chrome import ChromeDriverManager    from selenium.webdriver.chrome.service import Service    USE_WDM = Trueexcept Exception:    USE_WDM = False

BASE_URL = "https://bbs.wangjing.cn/"LOGIN_URL_CANDIDATES = [    "member.php?mod=logging&action=login",    "member.php?mod=logging&action=login&mobile=2",    "member.php?mod=logging&action=login&infloat=yes&handlekey=login",]# 常见Discuz签到插件入口(不保证存在,但值得尝试)SIGN_URL_CANDIDATES = [    "plugin.php?id=dsu_paulsign:sign",    "plugin.php?id=dsu_paulsign:sign&operation=qiandao",    "plugin.php?id=k_misign:sign",    "plugin.php?id=qiandao",    "home.php?mod=task",  # 有些论坛签到是任务体系]
KEYWORDS = ["签到""每日签到""打卡""签 到""Check in""checkin""sign"]

@dataclassclass SignResult:    ok: bool    title: str    detail: str    raw_url: str = ""

def env(name: str, default: str = "") -> str:    v = os.getenv(name)    return v.strip() if v is not None else default

def pushplus_send(token: str, title: str, content: str) -> None:    if not token:        return    try:        requests.get(            "https://www.pushplus.plus/send",            params={"token": token, "title": title, "content": content, "template""txt"},            timeout=10,        )    except Exception:        pass

class WangJingBbsSigner:    def __init__(self, username: str, password: str, headless: bool = True, timeout: int = 20):        self.username = username        self.password = password        self.headless = headless        self.timeout = timeout
        self.driver = self._build_driver()        self.wait = WebDriverWait(self.driver, self.timeout)
    # ------------------ 核心:浏览器初始化 ------------------    def _build_driver(self) -> webdriver.Chrome:        chrome_options = Options()        if self.headless:            chrome_options.add_argument("--headless=new")        chrome_options.add_argument("--no-sandbox")        chrome_options.add_argument("--disable-dev-shm-usage")        chrome_options.add_argument("--disable-gpu")        chrome_options.add_argument("--window-size=1280,900")        chrome_options.add_argument("--lang=zh-CN")        chrome_options.add_argument(            "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) "            "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"        )
        if USE_WDM:            service = Service(ChromeDriverManager().install())            return webdriver.Chrome(service=service, options=chrome_options)        return webdriver.Chrome(options=chrome_options)
    # ------------------ 工具:安全打开页面 ------------------    def open(self, url: str) -> None:        if not url.startswith("http"):            url = BASE_URL.rstrip("/") + "/" + url.lstrip("/")        self.driver.get(url)
    # ------------------ 工具:判断是否登录 ------------------    def is_logged_in(self) -> bool:        """        Discuz 常见特征:        - 页面里存在"退出/退出登录"        - 或存在 "欢迎您回来"/用户头像等        """        html = self.driver.page_source        if re.search(r"(退出|退出登录|注销|Log\s*out)", html, re.I):            return True        # 一些站点会有"设置""消息"等        if re.search(r"(设置|我的|消息|提醒)", html):            return True        return False
    # ------------------ 主要方法:登录 ------------------    def login(self) -> bool:        """        多入口尝试打开登录页 -> 填入账号密码 -> 提交 -> 验证是否登录成功        """        # 先打开首页        self.open(BASE_URL)        time.sleep(2)
        # 如果已登录,直接返回        if self.is_logged_in():            return True
        # 依次尝试登录页        last_err = ""        for path in LOGIN_URL_CANDIDATES:            try:                self.open(path)                time.sleep(2)
                # Discuz 常见输入框:username / password 或者表单 placeholder                user_input = self._find_any_input([                    (By.NAME, "username"),                    (By.ID, "username"),                    (By.CSS_SELECTOR, "input[name='username']"),                    (By.XPATH, "//input[contains(@placeholder,'用户名') or contains(@placeholder,'账号') or contains(@placeholder,'邮箱') or contains(@placeholder,'手机')]"),                ])                pwd_input = self._find_any_input([                    (By.NAME, "password"),                    (By.ID, "password"),                    (By.CSS_SELECTOR, "input[type='password']"),                    (By.XPATH, "//input[@type='password']"),                ])
                if not user_input or not pwd_input:                    continue
                user_input.clear()                user_input.send_keys(self.username)                pwd_input.clear()                pwd_input.send_keys(self.password)
                # 提交按钮:常见是 <button type=submit> 或 "登录"                submit_btn = self._find_any_clickable([                    (By.CSS_SELECTOR, "button[type='submit']"),                    (By.CSS_SELECTOR, "input[type='submit']"),                    (By.XPATH, "//*[self::button or self::a or self::span][contains(.,'登录') or contains(.,'登 录')]"),                ])                if submit_btn:                    submit_btn.click()                else:                    # 兜底:回车提交                    pwd_input.submit()
                time.sleep(3)                # 登录后通常跳回首页或弹窗关闭,做一次首页确认                self.open(BASE_URL)                time.sleep(2)
                if self.is_logged_in():                    return True            except Exception as e:                last_err = str(e)                continue
        print(f"❌ 登录失败: {last_err}")        return False
    def _find_any_input(self, locators):        for by, value in locators:            try:                ele = self.wait.until(EC.presence_of_element_located((by, value)))                if ele:                    return ele            except Exception:                continue        return None
    def _find_any_clickable(self, locators):        for by, value in locators:            try:                ele = self.wait.until(EC.element_to_be_clickable((by, value)))                if ele:                    return ele            except Exception:                continue        return None
    # ------------------ 主要方法:发现签到入口 ------------------    def discover_sign_url(self) -> Optional[str]:        """        1) 直接尝试常见签到插件URL(成功则返回)        2) 首页/个人中心查找"签到/打卡"等链接        3) 从页面源码提取疑似插件链接        """        # 1) 常见插件URL试探        for p in SIGN_URL_CANDIDATES:            url = BASE_URL.rstrip("/") + "/" + p            if self._url_looks_like_sign_page(url):                return url
        # 2) 在首页找"签到"入口        self.open(BASE_URL)        time.sleep(2)        url = self._scan_page_for_sign_link()        if url:            return url
        # 3) 在"任务中心/用户中心"等页面再找        for extra in ["home.php?mod=space""home.php?mod=task""forum.php"]:            try:                self.open(extra)                time.sleep(2)                url = self._scan_page_for_sign_link()                if url:                    return url            except Exception:                pass
        return None
    def _url_looks_like_sign_page(self, url: str) -> bool:        try:            self.open(url)            time.sleep(2)            html = self.driver.page_source            # 粗略判定:页面含"签到/已签到/签到成功/签到说明"等            if any(k in html for k in ["签到""已签到""签到成功""今日已签到""补签"]):                return True        except Exception:            pass        return False
    def _scan_page_for_sign_link(self) -> Optional[str]:        html = self.driver.page_source        doc = etree.HTML(html)        if doc is None:            return None
        # 先找 a 标签文本包含关键词        for kw in KEYWORDS:            nodes = doc.xpath(f"//a[contains(normalize-space(.), '{kw}')]/@href")            if nodes:                return self._abs_url(nodes[0])
        # 再找 href 中包含 sign/qiandao/dsu_paulsign 等        nodes = doc.xpath("//a/@href")        for href in nodes or []:            if not href:                continue            if re.search(r"(dsu_paulsign|qiandao|checkin|sign|mission|task)", href, re.I):                return self._abs_url(href)
        return None
    def _abs_url(self, href: str) -> str:        href = href.strip()        if href.startswith("http"):            return href        if href.startswith("//"):            return "https:" + href        return BASE_URL.rstrip("/") + "/" + href.lstrip("/")
    # ------------------ 主要方法:执行签到 ------------------    def do_sign(self, sign_url: str) -> SignResult:        """        打开签到页 -> 尝试点击"签到/立即签到/打卡"按钮 -> 解析结果        """        self.open(sign_url)        time.sleep(2)
        # 1) 常见按钮点击(尽量宽松匹配)        clicked = False        btn = self._find_any_clickable([            (By.XPATH, "//*[self::a or self::button or self::span][contains(.,'签到') or contains(.,'打卡') or contains(.,'立即签到')]"),            (By.CSS_SELECTOR, "button"),            (By.CSS_SELECTOR, "a"),        ])        try:            if btn:                # 防止点到"签到说明"等非触发按钮:简单过滤                txt = (btn.text or "").strip()                if any(x in txt for x in ["签到""打卡""立即"]):                    btn.click()                    clicked = True                    time.sleep(3)        except Exception:            pass
        # 2) 结果解析:成功/已签到/失败        html = self.driver.page_source        title, detail, ok = self._parse_sign_result(html, clicked, sign_url)        return SignResult(ok=ok, title=title, detail=detail, raw_url=sign_url)
    def _parse_sign_result(self, html_text: str, clicked: bool, url: str) -> Tuple[strstrbool]:        # 常见成功/重复签到提示        if re.search(r"(签到成功|打卡成功|已签到|今日已签到|已经签到)", html_text):            # 尝试抓一些奖励文案            award = self._extract_award_text(html_text)            if re.search(r"(已签到|今日已签到|已经签到)", html_text) and not re.search(r"(成功)", html_text):                return "今日已签到", award or "页面提示:已签到/无需重复签到"True            return "签到成功", award or "页面提示:签到成功"True
        # 若点了按钮但没匹配到成功字样,可能站点返回提示在弹窗/JS里        if clicked:            return "可能已触发签到""已点击签到按钮,但未在页面中识别到明确成功文案,可手动确认一次。"True
        return "签到失败/未找到入口"f"未识别到签到成功文案,或未找到可点击的签到按钮。URL={url}"False
    def _extract_award_text(self, html_text: str) -> str:        # 尝试提取"积分/金币/威望/红包"等关键信息附近文字        patterns = [            r"(积分[^<\n]{0,40})",            r"(金币[^<\n]{0,40})",            r"(威望[^<\n]{0,40})",            r"(红包[^<\n]{0,40})",            r"(奖励[^<\n]{0,60})",        ]        for p in patterns:            m = re.search(p, html_text)            if m:                return m.group(1)        return ""
    # ------------------ 主流程 ------------------    def run(self) -> SignResult:        try:            if not self.login():                return SignResult(False"登录失败""账号密码错误/站点登录结构变化/需要验证码", BASE_URL)
            sign_url = self.discover_sign_url()            if not sign_url:                return SignResult(False"未找到签到入口""站点签到入口可能隐藏在个人中心/任务中心,或需要手动指定签到URL", BASE_URL)
            return self.do_sign(sign_url)
        except Exception as e:            return SignResult(False"程序异常"f"{e}\n\n{traceback.format_exc()}", BASE_URL)        finally:            try:                self.driver.quit()            except Exception:                pass

def main():    username = env("WJ_USERNAME")    password = env("WJ_PASSWORD")    headless = env("WJ_HEADLESS""true").lower() not in ["0""false""off"]    timeout = int(env("WJ_TIMEOUT""20"))    push_token = env("PUSHPLUS_TOKEN""")
    if not username or not password:        print("❌ 缺少环境变量 WJ_USERNAME / WJ_PASSWORD")        print("✅ 示例:")        print("   export WJ_USERNAME='你的账号'")        print("   export WJ_PASSWORD='你的密码'")        return
    signer = WangJingBbsSigner(username, password, headless=headless, timeout=timeout)    result = signer.run()
    print("=" * 60)    print(f"结果:{result.title}")    print(f"详情:{result.detail}")    print(f"入口:{result.raw_url}")    print("=" * 60)
    # 推送    if push_token:        pushplus_send(push_token, f"望京网签到 - {result.title}"f"{result.detail}\n\n入口:{result.raw_url}")

if __name__ == "__main__":    main()
解析

该脚本为望京网自动签到脚本,主要作用包括:

  • 自动登录望京网(兼容 Discuz 常见登录页结构)

  • 自动发现签到入口(多策略:常见插件 URL → 页面按钮文本搜索 → 源码链接关键字提取)

  • 自动执行签到(点击"签到/打卡/立即签到"等按钮)

  • 自动判断结果(识别"签到成功/已签到"等关键字,并尝试提取奖励信息)

  • 可选推送通知(PushPlus)

主要方法

login()

  • 作用:完成登录并验证是否成功。

  • 做法

    1. 打开首页,若已登录则跳过

    2. 依次尝试多个常见登录 URL

    3. 自动定位账号/密码输入框与"登录"按钮

    4. 提交后回到首页检查是否出现"退出/设置/消息"等已登录特征

discover_sign_url()

  • 作用:找到"签到页面/签到入口"的 URL。

  • 做法(按优先级):

    1. 直接访问候选插件地址:plugin.php?id=dsu_paulsign:sign 等,判断页面是否像签到页

    2. 在首页、任务页、个人页扫描 a 标签文本(含"签到/打卡/每日签到"等)

    3. 从页面源码的所有链接中提取包含 sign/qiandao/dsu_paulsign/task/mission 的 href

do_sign(sign_url)

  • 作用:进入签到页并执行一次签到。

  • 做法

    1. 打开签到页

    2. 尝试点击包含"签到/打卡/立即签到"的元素(a/button/span)

    3. 等待页面刷新/变化

    4. 调用 _parse_sign_result() 分析签到结果

_parse_sign_result(html_text, clicked, url)

  • 作用:把页面内容解析成结构化结果(成功/重复/失败)。

  • 规则

    • 有"签到成功/打卡成功/已签到/今日已签到" → 认为成功(或重复签到)

    • 点击过按钮但没找到关键字 → 返回"可能已触发签到"(提示你人工确认一次)

    • 否则 → 认为失败并给出原因



注意

本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。


历史脚本txt文件获取>>
服务器搭建,人工服务咨询>>

做了个出海关键词的网站|无比期待2026年

在2025年的最后一夜启航 这是熊猫的第 310 篇原创 大家好,我是熊猫。 有段时间没写长文了。 趁这周有空,聊聊2026年想做的事情。 昨天写了这篇文章,把公众号名字改了,准备all-in出海。 为什么「熊猫搞钱记」会开始变成负担? 这段时间我把过去这一年多发表公众号上的...