golang+selenium+cron实现掘金自动化签到
使用技术
golang、cron(定时任务)、selenium(浏览器自动化)
实现思路
- 登录掘金
- 进入签到页面
- 点击签到按钮
- 点击去抽奖
- 点击免费抽奖
- 定时执行
登录掘金输入密码或者验证码登录时,需要滑动验证,所以需要使用selenium打开已经登录掘金的浏览器,并且保证session不丢失
使用selenium需要对应浏览器和驱动,在此我使用的是chorme浏览器和chromedriver
开发步骤
第一步:确认chrome浏览器版本
谷歌浏览器打开地址栏输入chrome://settings/help

第二步:下载对应版本的chromedriver,如果没有对应的版本,就下载相近的版本
https://registry.npmmirror.com/binary.html?path=chromedriver/


第三步:打开一个chrome浏览器并监听端口
进入chrome的文件目录(右键谷歌浏览器图标,打开文件所在位置)
使用cmd命令行输入以下命令
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"
在打开的浏览器中登录掘金账号
第四步:写代码
- 新建juejin-auto文件夹将chromedriver解压下来的exe文件放进去
- 打开终端初始化gomod文件
- 安装cron和selenium

- 编写main.go文件
package main
import (
"fmt"
"math/rand"
"time"
cron "github.com/robfig/cron/v3"
"github.com/tebeka/selenium"
"github.com/tebeka/selenium/chrome"
)
func main() {
c := cron.New()
c.AddFunc("30 9 *", autoCheckIn)
c.Start()
select {} // 因为定时任务是协程,所以在这里阻塞一下,防止程序直接退出
}
func autoCheckIn() {
// 随机延时,防止每天同一时间签到检测
randomSleep(600)
ops := []selenium.ServiceOption{}
s, _ := selenium.NewChromeDriverService("./chromedriver.exe", 1000, ops...)
defer s.Stop()
c := selenium.Capabilities{}
var args []string
args = append(args, "--remote-debugging-port=9222") // 监听9222端口
args = append(args, "--user-data-dir=C:\selenum\AutomationProfile") // 设置浏览器数据文件目录,保证session、cookie不丢失
c.AddChrome(chrome.Capabilities{
Path: "C:\Program Files\Google\Chrome\Application\Chrome.exe",
Args: args,
})
wd, err := selenium.NewRemote(c, "http://127.0.0.1:1000/wd/hub")
if err != nil {
fmt.Printf("err: %v\n", err)
}
defer wd.Quit()
fmt.Println("---进入掘金抽奖页面---")
err = wd.Get("https://juejin.cn/user/center/signin?avatar_menu")
randomSleep(5)
fmt.Println("---点击签到按钮---")
we, err := wd.FindElement(selenium.ByCSSSelector, (".code-calender .signin"))
we.Click()
randomSleep(5)
fmt.Println("---点击去抽奖---")
we, _ = wd.FindElement(selenium.ByCSSSelector, (".btn-area .btn"))
we.Click()
randomSleep(5)
fmt.Println("---点击免费抽奖---")
we, _ = wd.FindElement(selenium.ByCSSSelector, (".cost-box #turntable-item-0"))
we.Click()
randomSleep(5)
fmt.Println("---点击收下奖励---")
we, _ = wd.FindElement(selenium.ByCSSSelector, (".byte-modal__body .wrapper .submit"))
we.Click()
randomSleep(5)
fmt.Println("---收下奖励后去百度,避免长时间停留页面检测(猜的)---")
wd.Get("https://www.baidu.com")
}
func randomSleep(n int) {
rand.Seed(time.Now().UnixNano()) // 设置随机数种子
delay := rand.Intn(n) + 3 // 随机延时秒数
time.Sleep(time.Second * time.Duration(delay))
fmt.Println("延时了", delay+3, "秒")
}
运行程序

评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
作者分享
有没有视频剪辑的学习路线及资源,网上的资源好散,不知道从哪开始学
0
问个问题:考上研之后,开学前这段时间找短期工作给交社保有啥影响吗?毕业以后不算应届生身份?
10
求深入浅出计算机网络的pdf电子书 资源
4
求webpack学习笔记,各种插件的作用,优化方案之类的#前端# 资源
18
#资源# 阅读 js红宝书
本书是 JavaScript 经典图书的新版。第 4 版涵盖 ECMAScript 2019,全面、深入地介绍了 JavaScript 开发者必须掌握的前端开发技术,涉及 JavaScript 的基础特性和高级特性。书中详尽讨论了 JavaScript 的各个方面,从 JavaScript 的起源开始,逐步讲解到新出现的技术,其中重点介绍 ECMAScript 和 DOM 标准。
在此基础上,接下来的各章揭示了 JavaScript 的基本概念,包括类、期约、迭代器、代理,等等。另外,书中深入探讨了客户端检测、事件、动画、表单、错误处理及 JSON。本书同时也介绍了近几年来涌现的重要新规范,包括 Fetch API、模块、工作者线程、服务线程以及大量新 API。
42

