python 实现 掘金的自动签到,抽奖,粘幸运值
前言
最近,拿python 写了一个脚本,大批量根据个人信息查询证书的结果,并导出成Excel,挺简单的。实现后,想着每天签到掘金,有时候还会忘记,就试着拿python 去写一下。整体思路,就是模拟正常签到的过程。
思路
需要使用到 python 的 Selenium包(用于Web应用程序测试的工具),以及 chromedriver.exe(下载地址),模拟用户的操作。
一开始想的是自动输入用户名和密码,走到这一步时,才想起来,有验证码,这一步没办法跳过,只好通过 cookie 来实现自动登录。
所以具体的实现步骤就是:
-
加载cookie ,实现自动登录
-
关闭等级上线 这个弹窗
-
点击 跳过按钮
-
点击 签到按钮
-
点击 立即签到按钮
-
点击 去抽奖 按钮
-
点击 免费抽奖
-
粘幸运值
这样下来,整体步骤是真的繁琐,一旦掘金官网有调整,代码也得做调整。我也有看到其他掘友直接用接口去实现签到以及抽奖,这样更厉害 云函数定时触发掘金社区:自动签到 、自动免费抽奖,有空我也拿python 的request 去写一下。
工具
chromedriver
模拟点击浏览器的google的程序 chromedriver.exe, 需要找到与自己浏览器适配的版本。
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