python 实现 掘金的自动签到,抽奖,粘幸运值

688 阅读3分钟

python 实现 掘金的自动签到,抽奖,粘幸运值

前言

最近,拿python 写了一个脚本,大批量根据个人信息查询证书的结果,并导出成Excel,挺简单的。实现后,想着每天签到掘金,有时候还会忘记,就试着拿python 去写一下。整体思路,就是模拟正常签到的过程。

思路

需要使用到 python 的 Selenium包(用于Web应用程序测试的工具),以及 chromedriver.exe(下载地址),模拟用户的操作。

一开始想的是自动输入用户名和密码,走到这一步时,才想起来,有验证码,这一步没办法跳过,只好通过 cookie 来实现自动登录。

image.png

所以具体的实现步骤就是:

  1. 加载cookie ,实现自动登录

  2. 关闭等级上线 这个弹窗

image.png

  1. 点击 跳过按钮

image.png

  1. 点击 签到按钮

  2. 点击 立即签到按钮

  3. 点击 去抽奖 按钮

image.png

  1. 点击 免费抽奖

  2. 粘幸运值

这样下来,整体步骤是真的繁琐,一旦掘金官网有调整,代码也得做调整。我也有看到其他掘友直接用接口去实现签到以及抽奖,这样更厉害 云函数定时触发掘金社区:自动签到 、自动免费抽奖,有空我也拿python 的request 去写一下。

工具

chromedriver

模拟点击浏览器的google的程序 chromedriver.exe, 需要找到与自己浏览器适配的版本。

image.png

XPath Helper

chrome爬虫网页解析工具,使用到xpath获取URL路径。下载地址

具体的使用教程,可以看看 XPath Helper:chrome爬虫网页解析工具 Chrome插件图文教程

获取cookie

因为要通过 selenium 去携带 cookie 去实现免登录,selenium 下面的add_cookie 方法里必须要字典类型的数据格式

 cookie_dict = {
         'domain': 'juejin.cn',
         'name': cookie.get('name'),
         'value': cookie.get('value'),
         "expires": '',
         'path': '/',
         'httpOnly': False,
         'HostOnly': False,
         'Secure': False
     }
 add_cookie(cookie_dict)

具体的获取步骤

 # 下载 selenium
 pip install selenium
 from selenium import webdriver
 import os
 import time
 import json
 ​
 ​
 def browser_initial():
     """"
     进行浏览器初始化
     """
     os.chdir('D:\pythonwork')
     browser = webdriver.Chrome('F:\chorme插件\chromedriver_win32\chromedriver.exe')
     log_url = 'https://juejin.cn'
     return log_url, browser
 ​
 ​
 def get_cookies(log_url, browser):
     """
     获取cookies保存至本地
     """
     browser.get(log_url)
     print('开始登录')
     time.sleep(30)  # 进行输入用户名和密码
     print('登录成功!')
     dictCookies = browser.get_cookies()  # 获取list的cookies
     jsonCookies = json.dumps(dictCookies)  # 转换成字符串保存
 ​
     with open('cookies.txt', 'w') as f:
         f.write(jsonCookies)
     print('cookies保存成功!')
 ​
 ​
 if __name__ == "__main__":
     tur = browser_initial()
     get_cookies(tur[0], tur[1])

自动签到,抽奖,粘幸运值

 import os
 from selenium import webdriver
 import time
 import json
 ​
 ​
 ​
 # 找到插件的路径,使用它驱动操作
 browser = webdriver.Chrome('F:\chorme插件\chromedriver_win32\chromedriver.exe')
 ​
 # 选择需要打卡的网址,填入你的签到网页
 browser.get("https://juejin.cn")
 ​
 #加载 cookie
 os.chdir('D:\pythonwork')
 with open('cookies.txt', 'r', encoding='utf8') as f:
     listCookies = json.loads(f.read())
 ​
 # 往browser里添加cookies
 for cookie in listCookies:
     cookie_dict = {
         'domain': 'juejin.cn',
         'name': cookie.get('name'),
         'value': cookie.get('value'),
         "expires": '',
         'path': '/',
         'httpOnly': False,
         'HostOnly': False,
         'Secure': False
     }
     browser.add_cookie(cookie_dict)
 ​
 # 刷新网页,cookies才成功
 browser.refresh()
 print("登录成功")
 ​
 # 关闭等级上线 这个弹窗
 try:
     browser.find_element_by_xpath("//*[@id='juejin']/div[4]/div/div/div/button").click()
     time.sleep(2)
 except:
      print("关闭等级上线 失败")
 else:
      print("点击 关闭等级上线 完成")
 ​
 #点击 跳过按钮
 try:
     browser.find_element_by_xpath("//*[@id='juejin']/div[4]/div/div/div/button").click()
     time.sleep(2)
 except:
     print("跳过 失败")
 else:
     print("点击 跳过 完成")
 ​
 #点击 签到按钮
 try:
     browser.find_element_by_xpath("//*[@id='juejin']/div[1]/main/div/div/div/aside/div[1]/div[1]/button").click()
     time.sleep(2)
 except:
     print("签到 失败")
 else:
     print("点击 签到 完成")
 ​
 #点击 立即签到按钮
 try:
     browser.find_element_by_xpath("//*[@id='juejin']/div[1]/main/div[2]/div/div[1]/div[1]/div[2]/div[2]/div/button").click()
     time.sleep(2)
 except:
     print("立即签到 失败")
 else:
     print("点击 立即签到 完成")
 ​
 #点击 去抽奖 按钮
 try:
     browser.find_element_by_xpath("/html/body/div[7]/div[2]/div/div[2]/div/div[3]/button").click()
     time.sleep(2)
 except:
     print("去抽奖 失败")
 else:
     print("点击 去抽奖 完成")
 ​
 ​
 #点击 免费抽奖
 try:
     browser.find_element_by_xpath("//*[@id='turntable-item-0']/div").click()
     time.sleep(2)
 except:
     print("抽奖 失败")
 else:
     print("点击 免费抽奖 完成")
 ​
 # 粘幸运值
 try:
     browser.find_element_by_xpath("//*[@id='stick-txt-0']/span/span/svg").click()
     time.sleep(2)
 except:
     print("粘幸运值 失败")
 else:
     print("点击 粘幸运值 完成")
 ​
 ​

打包成 exe 文件

 # 下载打包工具
 pip install pyinstaller
 ​
 #打包
 pyinstaller -F juejin.py

windows 上配置定时任务

windows设置定时任务并运行python脚本

参考文章

利用selenium携带cookies实现免登录