【技术教程】萌の领域每日自动打卡+点赞
最近在自学python,于是就……不知道龙姐姐会不会给我审核通过 最后审核由 龙姐 UID:1
前言
最近忽然就对python感兴趣了,然后看着网上的教程自学了几天,想着要实际运用到生活中。
想必如今大家的萌币都早已不缺了,但是像我这种守财奴性格,萌币肯定是越多越好啦。
回想起刚入站那几天辛苦的点赞和打卡,我就用我贫瘠的知识写了这段脚本。
应当具备的能力和条件
- 一台服务器或者类似的设备。因为我手头有一台轻量的服务器,所以我这段程序是基于谷歌浏览器及其驱动而写的,所以如果想用这段程序,你应当有一台服务器或者类似的设备,而云函数恐怕是不能运行的
- 能读懂python的基础语法,当然基础实际上就够了,毕竟我也很菜,用的这个自动化库和按键精灵没什么区别,只是因为我的服务器是无界面的linux,不然我可能就用windows上别的图形化自动化工具了
- 会用百度
- 懂得提问的技巧
- 不要向我发出代挂的请求
- 如果是大佬,请别喷我
代码和我遇见的坑
#需要的库
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from aip import AipOcr
import time
#百度api文字识别的应用码,自己注册账号填入,详情见预备知识3
APP_ID = '你的appid'
API_KEY = '你的apikey'
SECRET_KEY = '你的secretkey'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
username='你的账号(邮箱)'
password='你的密码'
#对浏览器的配置项,我也是网上抄的,主要是为了无界面运行且不崩溃
opt = Options()
opt.add_argument('--no-sandbox')
opt.add_argument('window-size=1920x1080')
opt.add_argument('--disable-gpu')
opt.add_argument('--hide-scrollbars')
opt.add_argument('--headless')
#登录部分
def m_login():
global driver
#下面前两项driver是用微软Edge控制的,第三项是chrome浏览器控制的,
#要么注释掉前两项,要么注释掉第三项,具体看你用的是什么浏览器
#忘了说,不管哪个都还需要其对应的浏览器驱动,
#不是只装浏览器就行,详情看预备知识3
driver = webdriver.Edge()
driver.maximize_window()
#driver = Chrome(options=opt)
#没什么技术含量,就模拟真人点击
driver.get("https://www.moezone.dev/")#访问首页
driver.find_element(By.XPATH,'/html/body/div[12]/div/div[2]/div/footer/a[1]').click()#点欢迎信息
driver.find_element(By.XPATH,'/html/body/div[5]/div[2]/div/div[3]/div[1]/a').click()#点登录
driver.find_element(By.NAME,'email').send_keys(username)#输入账号
time.sleep(1)#防止过快出错,等一会,下面的sleep函数都是这个意思
driver.find_element(By.NAME,'pwd').send_keys(password)#输入密码
time.sleep(1)
img=driver.find_element(By.XPATH,'/html/body/div[12]/div/div[2]/div/form/div/div/div/div[4]/div/div[2]/img')#找到验证码
img.screenshot('001.png')#保存验证码
f=open('001.png','rb')#打开验证码
imgdata=f.read()#读取验证码的二进制信息
yzm=client.basicGeneral(imgdata)#发验证码给百度并返回信息
f.close()#关闭打开的图片
yzm=yzm['words_result'][0]['words']#提取出4位数字
time.sleep(1)
driver.find_element(By.NAME,'captcha').send_keys(yzm)#输入验证码
time.sleep(1)
driver.find_element(By.XPATH,'/html/body/div[12]/div/div[2]/div/form/footer/button').click()#点欢迎信息
time.sleep(3)
driver.find_element(By.XPATH,'/html/body/div[12]/div/div[2]/div/header/div/a').click()#忘了点啥了
driver.find_element(By.XPATH,'/html/body/div[5]/div[2]/div/nav/ul/li[1]').click()#点一次首页
#验证码识别很有可能出错,对登录进行异常处理
def m_tlogin():
try:
m_login()
print("登录成功")
return False#成功返回False
except:
driver.close()#出错后关闭浏览器
print('登录失败,重新登录')
return True#然后返回True
def m_daka():
driver.find_element(By.XPATH,'/html/body/div[5]/div[2]/div/div[3]/div[2]').click()#点签到
time.sleep(3)
driver.find_element(By.XPATH,'/html/body/div[12]/div/div[2]/div/footer').click()#点提示信息
#打过卡了再打会报错,异常处理
def m_tdaka():
try:
m_daka()
print('打卡成功')
return False#返回False
except:
print('打过卡了')
return False#还是返回False
#进入最新文章页面
def enternew():
time.sleep(1)
ele=driver.find_element(By.XPATH,'/html/body/div[8]/div[2]/div[2]/div/article[8]/div/a/img')#定位一个元素
driver.execute_script("arguments[0].scrollIntoView();",ele)#滚动到合适位置
time.sleep(1)
driver.find_element(By.XPATH,'/html/body/div[8]/div[2]/a').click()#点进最新文章
#对文章进行一次点赞
def m_dianzan_one(i):
time.sleep(1)
driver.execute_script('window.scrollBy(0,{})'.format(i*300-300))#滚动找元素
time.sleep(1)
xrul='/html/body/div[7]/div[1]/article[{}]/div[2]/a'.format(i)#获取文章的Xpath链接
el=driver.find_element(By.XPATH,xrul).get_attribute('href')#获取文章的url链接
driver.get(el)#打开文章页
time.sleep(1)
ele=driver.find_element(By.XPATH,'/html/body/div[7]/div/div[1]/div/a[1]')#准备翻到下面
driver.execute_script("arguments[0].scrollIntoView();",ele)#翻到下面准备点赞
time.sleep(1)
js = 'document.getElementsByClassName("inn-singular__post__toolbar__item__link")[0].click();'#不知道为什么用click点不了,用了js点击
driver.execute_script(js)#点击
time.sleep(1)
driver.back()#返回文章列表页
print('点赞了第{}篇文章'.format(i))
time.sleep(1)
#循环点赞12次,好像12次是上限吧
def m_dianzan():
enternew()
for i in range(1,13):
m_dianzan_one(i)
print('点赞成功')
#主函数=登录+打卡+点赞
def main():
a=True
while a:
a=m_tlogin()
b=True
while b:
b=m_tdaka()
m_dianzan()
#循环执行,每24小时1次
if __name__=='__main__':
while True:
main()
driver.close()
print('执行成功,等待24小时后执行')
time.sleep(24*60*60)
运行截图
总结
本文适合有一定基础的萌友食用,我也不能写的太细,泛滥的话也不太合适,有兴趣搞的不看我这个自己也能慢慢摸出来
不过要是想用我这个,改一点前面的账号和浏览器类型基本上就能用了。
没什么要下载的,我贴个Edge的驱动程序算了,虽然网上一搜就能搜到