分享链滴自动签到 puppeteer 脚本

本贴最后更新于 323 天前,其中的信息可能已经时移世改

之前用 phantomjs,发现有 2 个问题,1 是 phantomjs 太老了且停止维护,导致存在兼容性问题,比如有些网站的 js 无法正常解析导致点击或操作无效,2 有时脚本无法自动退出,我想可能还是兼容性问题,导致报错假死吧。

比如,之前用 phantomjs 实现链滴自动签到时就出现了这两个问题,只能通过 cookie 模拟登录然后再模拟签到,虽然勉强可用,但总归不完美。

于是,最近决定研究下 puppeteer,之前没用 puppeteer 的原因,主要考虑到 puppeteer 需要安装 node 环境等,没有 phantomjs 轻量级。

后来发现 puppeteer 比 phantomjs 功能强大且稳定多了,而且 node 环境感觉目前几乎已经是必备的运行时了。

于是动手重写了链滴社区自动签到的脚本,运行了几天,感觉还不错,还算稳定,现在分享给大家,有需要的朋友可以尝试下。

不知道这个脚本是否违规,如果有不妥之处,请管理员大大们告知下,第一时间删除。

脚本整体流程大概是,先访问签到页面,如果发现未登录则先模拟登录,登录完后再进入签到页进行签到,登录后会记录登录信息,下次再次访问签到页面时会带上登录的 cookie,不需要再次登录了。


2024-12-18 更新

增加了二次验证的支持 ,使用前需要执行 npm install otplib 安装 otplib 库,然后参数 twoFactorAuthKey 填写链滴的二次验证秘钥即可,二次验证秘钥可在链滴官网用户设置-> 安全设置-> 两步验证中获取,如果已绑定的需先解绑才能看到。

感谢 @EmptyLight 提供的方法!


代码:

https://gitee.com/wish163/mysoft/blob/main/%E6%80%9D%E6%BA%90/%E9%93%BE%E6%BB%B4%E8%87%AA%E5%8A%A8%E7%AD%BE%E5%88%B0puppeteer%E8%84%9A%E6%9C%AC.js

使用方法:

  1. 先安装 node 环境,已具备的朋友请跳过,有不懂的朋友请自行搜索,教程很多。
  2. 安装 puppeteer,只要执行 npm i puppeteer 或 npm i puppeteer-core 即可。这里推荐 npm i puppeteer-core 方式,因为这种方式不需要安装 200M+ 的 Chrome For Testing,使用 chrome 浏览器的无头模式即可。但本脚本理论上两种方式都支持,但仅在 puppeteer-core 模式下测试通过。
  3. 把以上脚本保存为 js 文件即可,比如,ld246_signin.js,然后运行 node ld246_signin.js 即可。puppeteer 脚本本质上就是 nodejs 脚本,puppeteer 只不过是 nodejs 的一个模块而已,所以,nodejs 环境下的其他库也可以在 puppeteer 中使用。
  4. node ld246_signin.js 放到定时任务中即可,或者开机运行等。比如,我在 Mac 上是这样运行的 0 */1 * * * cd /Users/xxxx/bin/ld246_sign_in/ && /usr/local/bin/node puppeteer_ld246_singin_wilsons.js > /dev/null 2>&1 &,把它放到 crontab 中,每个整点运行一次,这样就保证总会有一次执行自动签到,如果你想提高命中率就把运行间隔设短一点,比如 10 分钟。不用担心重复运行,已签到的情况下,脚本会自动退出不会重复签到。
  5. 签到结果会放到运行脚本目录下的 log.txt 文件里,可以在这里查看每日签到结果及错误信息等。

注意事项:

  1. 用户名和密码必填,这主要用于未登录情况下的自动登录。
  2. chromePath 这个参数是 chrome 浏览器的安装路径,如果你是 Mac 系统通常不需要变动,如果是 Windows 系统需要根据注释说明进行修改,注意,Windows 的路径需要用 \ 进行转义。如果你使用的是 puppeteer 模式而非 puppeteer-core 模式,这个路径设置为空即可,换句话说,如果这个路径为空,则自动使用 puppeteer 模式。
  3. 通知路径脚本,是当签到产生异常时通知你的方式,这里使用 shell 脚本进行编写,你可以自己实现通知方式,如果没有保持为空即可。
  4. userAgent 这个参数可以根据需要更改你自己的浏览器头信息,如果你不清楚勿动即可。
  5. 脚本中的用户名和密码都是明文显示,如果你比较在意可以放到环境变量里,然后通过 process.env.xxxx 读取即可,具体请自行实现。
  6. 登录的 cookie 默认存储到脚本运行目录的 tmp 目录里,且明文保存,如果你担心安全问题,请自行实现加密和解密工作。

Mac 下的简单通知脚本如下:

notify 脚本

#/bin/bash
title="提示"
if [ "$2" != "" ] ;then
    title=$2
fi
/usr/bin/osascript -e "display notification \" $1 \" with title \"$title\" sound name \"Frog\""
/usr/bin/osascript -e "say \"您有新的通知 $title $1\"";

alert 脚本

#/bin/bash
button="知道了"
if [ "$2" != "" ] ;then
    button=$2
fi
/usr/bin/osascript -e "say \"您有确认信息 $1 请确认\"" &
/usr/bin/osascript -e "tell application \"System Events\" to display alert \"$1\" buttons {\"$button\"} default button 1"

其中,/usr/bin/osascript -e "say \"xxxx xxxx\"" 是语音通知,如果你不需要语音通知,注释或删除即可。

alert 和 notify 的区别是,alert 在发生严重错误,导致流程中断时会弹出,比如登录失败,这个弹窗不会消失,除非用户手动点击;而通知则是简单提醒,通常过一会会自动消失。

但,如果是你自己实现的通知脚本,那就看你如何定义了。

最后,放一个签到脚本的整体流程图吧。

puppeteer 链滴自动签到流程图.png

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26338 引用 • 109519 回帖
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1283 回帖
  • Puppeteer
    7 引用 • 33 回帖
  • 签到
    39 引用 • 395 回帖 • 10 关注
4 操作
wilsons 在 2024-12-18 18:18:36 更新了该帖
wilsons 在 2024-12-18 18:12:53 更新了该帖
wilsons 在 2024-12-18 18:10:48 更新了该帖
wilsons 在 2024-12-18 18:09:02 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • HugZephyr

    该说不说, 我非常需要这个, 但是合不合法就不知道了 😂

    1 回复
  • wilsons 1

    哈哈哈,所以等管理员没反应过来前保存 😄

  • 巨佬牛逼

    可惜我的小卡拉米服务器估计带着比较吃力

    1 回复
  • wilsons 1

    没问题的,还算轻量级,仅安装 puppeteer 模块,才 6M 多大小,运行 Chrome 无头模式,通常 120M 左右内存,CPU 5% 以内,通常只需要运行几秒就退出了,服务器根本还没反应过来就退出了。😂

    1 回复
  • 感谢大佬,现在就试试trollface

  • wilsons 1

    其实还有一种简单的方法

    1. 浏览器安装油猴扩展 https://www.tampermonkey.net/

    2. 安装链滴每日签到油猴脚本 https://greasyfork.org/zh-CN/scripts/492637

    3. 打开链滴每日签到页面 https://ld246.com/activity/checkin 然后将页面保存为应用

      image.png

    4. 使用定时任务,定时打开这个应用即可。

    5. 如果想隐藏打开这个应用,Windows 很多方式,比如 vbs 脚本等,Mac 可以使用自动化任务脚本等。

      比如:

      appName="每日签到 - 活动 - 链滴"
      appPath="/Users/xxxx/Applications/Chrome Apps.localized"
      open -a "$appPath/$appName.app" && sleep 1 && osascript -e "tell application \"$appName\" to tell window 1 to set visible to false" && sleep 10 && osascript -e "tell application \"$appName\" to quit"
      
  • pakeh2866

    感谢分享,学习了~

  • EmptyLight

    脚本没处理 totp 二次验证的情况,我说怎么登不进去。。。现在动手重写有关二次验证的部分

    1 回复
  • wilsons 1 2 评论

    是的,你可以改进下。

    二次验证,需要自己实现一个动态秘钥生成客户端。

    具体代码放不出来,触发安全验证了,就连输入框、按钮的选择器都不能放
    EmptyLight
    用一个 otpauth 库就能生成 totp,再配合原有的代码写一下就能填写 totp
    EmptyLight
  • wilsons 1 3 评论

    @EmptyLight

    代码放不出来什么意思?

    嗯,你自己实现吧,暂时不支持二次验证。

    链滴有评论区的检测机制,如果有敏感信息会提醒你发不出来,比如 totp 之类的
    EmptyLight
    @EmptyLight 可以放到 gitee 等链接过来即可,放到文本文件然后网盘链接也行。不过,这个检测应该不是安全问题,可能是链滴页面长久未刷新导致的,一般刷新下页面就可以了。
    wilsons
    文章地址 GitHub PageCOS)
    EmptyLight 1
  • EmptyLight 1 评论

    提醒一下,otp 密钥可以在自己的 otp 管理软件里面查看,不一定需要重新绑定。如果你用 Microsoft Authoricator 的我没法给出步骤,因为我没用过。不过我自己用的是 KeepassXC,不管是 Keepass 插件还是 KeepassXC、KeepassDX 都可以自己看 otp 密钥。

    感谢提醒!可能有些 app 提供了这个功能,我用的 Google Authenticator 不知道能否查看,没找到。不过,重新绑定是万能方法,哈哈哈。
    wilsons
  • 值得支持,按照佬的配置,完全没问题

请输入回帖内容 ...
wilsons
正在努力开发 wilsons 工具箱中 🛠️ 目前已正式入驻爱发电啦!💖 想催更、提需求?欢迎访问 👉 https://afdian.com/a/wilsons

推荐标签 标签

  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 824 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 2 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 345 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 682 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖 • 1 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 830 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 631 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖 • 1 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    172 引用 • 1538 回帖
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 2 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    93 引用 • 122 回帖 • 616 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    46 引用 • 114 回帖 • 167 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 637 关注
  • 电影

    这是一个不能说的秘密。

    123 引用 • 608 回帖 • 1 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 682 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    91 引用 • 59 回帖
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    415 引用 • 3596 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    373 引用 • 1858 回帖
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 734 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 506 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 642 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 3 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 573 关注