golang+selenium+cron实现掘金自动化签到


使用技术


golang、cron(定时任务)、selenium(浏览器自动化)


实现思路


  1. 登录掘金
  2. 进入签到页面
  3. 点击签到按钮
  4. 点击去抽奖
  5. 点击免费抽奖
  6. 定时执行


登录掘金输入密码或者验证码登录时,需要滑动验证,所以需要使用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"


在打开的浏览器中登录掘金账号


第四步:写代码


  1. 新建juejin-auto文件夹将chromedriver解压下来的exe文件放进去
  2. 打开终端初始化gomod文件
  3. 安装cron和selenium
  4. 编写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, "秒")
}

运行程序

掘金文章地址:https://juejin.cn/post/7229372047415525431

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
error
下载 APP