【网站密码管理不用愁】运用篇 • 自动定时签到程序,再也不用担心忘记网站签到


一、忘记签到的烦恼

你是否有跟我一样的烦恼,网站有签到活动,但是却总是经常忘记去签到。

比如说我喜欢每天在爱奇艺上看电视剧,身为铁杆会员的我还要每天在上面进行签到获得积分。
在这里插入图片描述

特别是如果你需要每日签到的网站一多,时常忘记倒不说,就算你记在一个显眼的地方告诉自己每天要到哪些网站去签到,也很麻烦啊,毕竟还要一个一个登录进去签到。在这里插入图片描述
那有没有什么办法能够让计算机在我们没用电脑的时候自动登录网站帮我们完成签到工作呢?

Of course!

利用python+selenium就能够实现快速登录网站,且再不用担心找不到账号密码的麻烦出现。

那进一步来说,我们是不是可以利用selenium的自动化运维功能,实现每日帮我自动完成网站的签到工作呢?
在这里插入图片描述

二、功能流程分析

Let’s go!

我们人工完成一系列签到的流程,看看我们都需要经历些什么。

第一步:输入目标网址

扫描二维码关注公众号,回复: 9779234 查看本文章

浏览器中输入https://www.iqiyi.com/u/point,我们进入到登录页面
在这里插入图片描述
第二步:切换至账号密码登录模式

由于我们之后要实现程序自动登录并签到,所以我们要选择账号密码登录模式,使用输入账号密码的方式进行登录。
在这里插入图片描述
第三步:输入账号密码

直接输入我们的账号密码,然后登录。
在这里插入图片描述
第四步:点击完成签到

登录之后,我们就直接进入了个人中心页面,点击如图所示中 [签到] 按钮,即可完成签到。
在这里插入图片描述
整个流程看起来非常简单,总共只需要四步:

  1. 输入目标网址
  2. 切换账号密码登录方式
  3. 输入账号密码登录
  4. 点击 [签到] 按钮

只要网站没有反爬虫机制,基本上代码上的事情都很简单。下面我们就正式书写代码。
在这里插入图片描述

三、代码实现书写

1. 单刀直入的代码

首先模拟人工签到的流程方式,寻找相应的HTML代码,从而实现整个签到流程。

from selenium import webdriver    
from selenium.webdriver import ChromeOptions 
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time

# 添加参数,使得window.navigator.webdriver返回undefined,避免被浏览器检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches',['enable-automation'])
driver= webdriver.Chrome(options=option)

# 第一步:登录目标网址
driver.get('https://www.iqiyi.com/u/point')     # 启动浏览器并登录签到页面

driver.maximize_window()          # 最大化窗口

# 第二步:切换账号密码登录方式
driver.find_element_by_xpath("//a[text()='账号密码登录']").click()         # 切换账号密码登录模式
time.sleep(2)          # 停留足够的时间,让浏览器加载完全

# 第三步:输入账号和密码
driver.find_element_by_css_selector(".tip-container.tip-account-container .txt-info.txt-account").send_keys('***********')   # 输入账号
driver.find_element_by_css_selector(".txt-info.txt-password").send_keys('******')          # 输入密码
driver.find_element_by_css_selector(".txt-info.txt-password").send_keys(Keys.ENTER)        # 回车登录

time.sleep(2)                 # 停留足够的时间,让浏览器加载完全

# 第四步:点击 [签到] 按钮
driver.find_element_by_css_selector(".score-task-btn.j-task-sign").click()      # 点击 [签到] 按钮,完成签到

time.sleep(3)            # 停留一定时间,确保完成签到

driver.quit()            # 退出浏览器

整个代码并没有什么难度,最关键的点在于采取合适的定位方式,准确定位目标元素。

——

2. 暗度陈仓的代码

庆幸的是,爱奇艺并没有相应的需要输入验证码等反爬虫机制。(毕竟一个视频网址,估计也没有啥重要值得爬取的内容)

但是如果我们遇到一些需要输入验证码的网站,可以采取利用cookie的方式绕过账号密码登录环节,从而强上网站。

关于如何获取、优化、添加cookie的原理和流程,可以查看【网站密码管理不用愁】进阶篇 • 如何利用cookie绕开登录验证码强上网站

重要的是我们在获得cookie的同时,进行优化处理,方便直接复制粘贴。

cookies = driver.get_cookies()    #获取cookie
print(cookies)               # 此步可省略
print('\n')

for i in cookies:           # 用for循环将每个字典cookie单独提取
    if 'expiry' in i:          
        del i['expiry']     # 删除键名为‘expiry’的键值对,否则会报错
    print('driver.add_cookie('+str(i)+')')    # 直接构造完整的方法,方便直接复制

最终获得的cookie如下,我们直接复制粘贴到代码上即可
(部分关键信息打了马赛克处理)
在这里插入图片描述
利用cookie绕过账号密码登录,我们会直接进入个人中心,但是会发现进入的页面跟用账号密码登录的不一样。

没关系,我们细心找一下,同样能在该页面找到 [签到] 的地方(如图左上角红框处)。
在这里插入图片描述
只要找到对应的HTML代码,利用selenium进行点击即可。

完整的代码如下(cookie有部分删除)

from selenium import webdriver    
from selenium.webdriver import ChromeOptions 
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time

# 添加参数,使得window.navigator.webdriver返回undefined,避免被浏览器检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches',['enable-automation'])
driver= webdriver.Chrome(options=option)
driver.get('https://www.iqiyi.com/u/point')     # 启动浏览器并登录签到页面

driver.maximize_window()                               # 最大化窗口

driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'QC175', 'path': '/', 'secure': False, 'value': '%7B%22upd%22%3Atrue%2C%22ct%22%3A1581948792710%7D'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'QC163', 'path': '/', 'secure': False, 'value': '1'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'P00002', 'path': '/', 'secure': False, 'value': '%7B%22uid%22%3A1163286562%2C%22pru%22%3A1163286562%2C%22user_name%22%3A%221220766889%40qq.com%22%2C%22nickname%22%3A%22%5Cu52b3%5Cu8d44%5Cu9614%5Cu8010%5Cu4e0d%22%2C%22pnickname%22%3A%22%5Cu52b3%5Cu8d44%5Cu9614%5Cu8010%5Cu4e0d%22%2C%22type%22%3A10%2C%22email%22%3A%221220766889%40qq.com%22%7D'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': '__dfp', 'path': '/', 'secure': False, 'value': 'a1a796e031fc1846c0a539834aa87775cdc176dfb1684e7a13a6da99f057c54d6e@1583244785017@1581948786017'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'P00003', 'path': '/', 'secure': False, 'value': '1163286562'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'QC006', 'path': '/', 'secure': False, 'value': 'uah1fi8gyv92yd6adsourss9'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'QC010', 'path': '/', 'secure': False, 'value': '142768177'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'Hm_lvt_53b7374a63c37483e5dd97d78d9bb36e', 'path': '/', 'secure': False, 'value': '1581948792'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'QC005', 'path': '/', 'secure': False, 'value': '5aae38e03b3082f484388e774a054aa9'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'QC179', 'path': '/', 'secure': False, 'value': '%7B%22userIcon%22%3A%22//img7.iqiyipic.com/passport/20160812/9c/2e/passport_1163286562_147100076035578_130_130.jpg%22%2C%22vipTypes%22%3A%221%22%7D'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'nu', 'path': '/', 'secure': False, 'value': '0'})
driver.add_cookie({'domain': 'iqiyi.com', 'httpOnly': False, 'name': 'QC173', 'path': '/', 'secure': False, 'value': '0'})


driver.refresh()                # 刷新页面
time.sleep(2)                   # 停留足够的时间,让浏览器加载完全

driver.find_element_by_css_selector(".btn-sign.j-user-sign ").click()    # 点击 [ 签到按钮 ]

driver.quit()  # 退出浏览器

在这里插入图片描述

四、自动定时启动

自动完成签到的脚本就这样搞定了,但还没有完。

毕竟我们是需要解决每日忘记签到的烦恼,所以我们还需要脚本在固定时间自动运行,而非手动启动程序进行签到。

所以最后我们还需要生成bat文件,并设置任务计划程序,让程序在我们空闲的时候自动启动并完成签到。

1. 生成bat文件

关于如何生成bat文件,在【网站密码管理不用愁】基础篇 • 利用selenium构建网站密码管理和自动登录神器 中也仔细讲解过,这里再简单提一下。

我们创建一个txt文本,取名【爱奇艺自动签到.txt】

打开后输入内容如下:

@py.exe [python程序的绝对路径] %*
在这里插入图片描述
然后另存为bat类型文件,我们就得到了一个bat文件。
在这里插入图片描述

——

2. 设置自动定时启动

下面就到了非常关键的一步,设置程序在固定时间自动运行

第一步:【Win+R】调出运行窗口,输入compmgmt.msc (调用计算机管理)
在这里插入图片描述
第二步:右键点击任务计划程序库,点击 [创建基本任务]在这里插入图片描述
第三步:命名 [爱奇艺自动签到],然后点击下一步
在这里插入图片描述
第四步:默认选择的 [每天] 执行,因为我们是需要每天签到,所以默认每天执行即可,然后点击下一步
在这里插入图片描述
第五步:自定义开始时间,我们可以将程序自动发生时间设置在自己空闲不用电脑的时候(比如我设置的中午12:35,通常这个时候我都去吃午饭了,电脑就在办公室开着的),然后点击下一步。
在这里插入图片描述
第六步:操作选择 [启动程序],然后点击下一步
在这里插入图片描述
第七步:浏览选择我们之前生成的 爱奇艺自动签到.bat],然后点击下一步
在这里插入图片描述
第八步:点击完成即可!在这里插入图片描述
以上就大功告成,我们就能在 【任务计划程序库】]里发现多了[爱奇艺自动签到] 这一项。
在这里插入图片描述
以后我们的自动签到脚本就能够在我们平时空闲的时候自动启动登录网站完成签到。

从此再也不用担心忘记签到这回事了!
在这里插入图片描述

五、复盘总结

  1. 小小的程序,却能给我们的工作生活带来很多方便,尤其像我这种经常忘记去网站签到的人,给我的生活实在带来了很多便利。
  2. 如果每天有多个网站需要签到,每个签到应独立成块,最终导入一个程序进行执行。这样既方便维护,又提高了执行效率。
  3. 两种方式登录网站。如果网站大门敞开我们可以直接单刀直入,如果网站有验证码等反爬虫机制,则可以利用cookie暗度陈仓进去。
  4. 整个程序本身是不难的,核心关键还是采取合适的定位方式准确定位目标元素。
  5. Get到新的技能,通过 [任务计划程序库] 我们可以让计算机在定时启动我们设置好的程序。

——
在这里插入图片描述

发布了35 篇原创文章 · 获赞 35 · 访问量 2742

猜你喜欢

转载自blog.csdn.net/nilvya/article/details/104364911