众所周知,CSDN是有签到福利的,但是嘛,对于我这种“懒虫”,我怎么可能每天都记得去签到hhh。所以,自动签到助手必须要来整一个!
思路很简单,玩过selenium的都知道,用webdriver模块模拟打开CSDN签到页面https://i.csdn.net/#/uc/reward,然后模拟点击签到按钮即可。
这里主要有两个要解决的问题。
1. 自动登录
第一个是要让Chrome记住之前的登录状态,不然每天程序运行的时候都得掏出手机来重新验证,一点都不人性化。
解决方法就是创建ChromeOptions,即Chrome浏览器的配置参数,然后将Chrome的默认配置文件夹输入进去,这样selenium所开启的Chrome就回去读取这个目录下的配置文件了,以前有记住过密码什么的网站就都在了。
options = webdriver.ChromeOptions()
options.add_argument(r"user-data-dir=C:\Users\lenovo\AppData\Local\Google\Chrome\User Data")
Chrome的配置文件夹具体地址要去找一下,不一定是我这个地址。
配置完后再启动Chrome:
driver = webdriver.Chrome("chromedriver",0,options)
driver.get("https://i.csdn.net/#/uc/reward")
第一次手动验证登录,以后每次就会自动登录上了。
2. 模拟点击按钮
通过selenium来实现模拟按键主要有两种思路,一种是分析网页源代码找到按钮组件,可以实现精确点击,另一种是通过手动设置坐标来点击,虽然简单直接但是不够精确。
在这儿呢,通过分析网页源代码会发现里面压根找不到按钮组件,所以没办法只能用第二种暴力方法了!
通过多次尝试我找到了按钮在页面上的大致坐标(1000,500)。
ActionChains(driver).move_by_offset(1000, 500).click().perform()
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
options = webdriver.ChromeOptions()
options.add_argument(r"user-data-dir=C:\Users\lenovo\AppData\Local\Google\Chrome\User Data")
driver = webdriver.Chrome("chromedriver",0,options)
driver.get("https://i.csdn.net/#/uc/reward")
time.sleep(5)
ActionChains(driver).move_by_offset(1000, 500).click().perform()
这部分其实之前有写过类似的实现方法,大家可以参考一下之前的一篇博文中关于云服务器的内容,这里就不多赘述。