实战项目二: 实现CSDN自动点赞
时间:2022-06-17
本文章向大家介绍实战项目二: 实现CSDN自动点赞,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
环境: Python3.6.5 编译器: Sublime Text 3 代码: GitHub 联系方式: ke.zb@qq.com 第三方库: selenium
写在前面:本文仅供参考学习,请勿用作它途。
一、思路
在CSDN中,如果实现自动点赞,就必须登录,这就避免不了和selenium打交道。Selenium是一个WEB自动化测试工具,在Python中常用于模拟登陆的实现
实现CSDN自动点赞分以下几个步骤:
- 登录账号
- 获取并储存cookies
- 读取并传入cookies
- 实现自动点赞
二、代码实现
(一)导入第三方库
对于selenium还没安装的童鞋可以用在命令行中安装
pip install selenium
import time,json,random
from selenium import webdriver
(二)登录账号
在selenium安装完成后,需要下一个驱动器(即chromedriver.exe)
而后运行代码
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get("https://passport.csdn.net/account/login")
可以看到弹出CSDN的登录界面
CSDN登录界面
我们这里采用的是账号密码登录方式,我们再来做一个切换,点击“账号登录”
time.sleep(3)
#进入账号密码登录界面
driver.find_element_by_xpath("//a[@class='login-code__open js_login_trigger login-user__active']").click()
time.sleep(3)
看到如下界面
账号登录界面
最后我们清空账号密码框,将自己的CSDN账号密码输入进去即可
#清空账号框中的内容
driver.find_element_by_xpath("//input[@name='username']").clear()
print("账号框清空完成")
#自动填入登录用户名
driver.find_element_by_xpath("//form[@id='fm1']/input[@name='username']").send_keys(account_CSDN)
print("账号输入完成")
#清空密码框中的内容
driver.find_element_by_xpath("//input[@name='password']").clear()
#自动填入登录密码
driver.find_element_by_xpath("//input[@name='password']").send_keys(password_CSDN)
time.sleep(3)
#点击登录
driver.find_element_by_xpath("//input[@class='logging']").click()
大家可能也注意到了我代码上用了很多time.sleep()进行休眠,这个是为了给服务器一个反应时间。拿输入账号密码后的登录操作来举例,如果你在输入账号密码后立即登录,系统会报出账号密码错误的提起,这个是由于我们代码输入账号密码的速度太快了,服务器还没接收到你输入的信息,代码就已经登录操作了,它自然会给你报错。当然人工输入是不会遇到这个问题的,你速度没那么快嘛。
(三)保存cookies到文件中
在介绍下面的内容前,我先来介绍几个知识点
- json.loads()是将str转化成dict格式
- json.dumps()是将dict转化成str格式。
- json.dump(dict,fp)把dict转换成str类型存到fp指向的文件里。
- json.load(fp)把fp指向的文件里的内容读取出来。
#获取并保存cookies
cookies = driver.get_cookies()
with open("cookies.txt", "w") as fp:
json.dump(cookies, fp)
(四)读取并传入cookies
这里我么将事先存入cookies.txt文件中的cookies提取出来加载进去即可。这里我补充一些webdriver中提供了操作cookie的相关方法:
- get_cookies() 获得cookie信息
- add_cookie(cookie_dict) 添加cookie
- delete_cookie(name) 删除特定(部分)的cookie
- delete_all_cookies() 删除所有的cookie
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get("https://blog.csdn.net/qq_38251616/article/details/82963395")
with open("cookies.txt", "r") as fp:
cookies = json.load(fp)
for cookie in cookies:
driver.add_cookie(cookie)
(五)实现自动点赞
driver.get("https://blog.csdn.net/qq_38251616/article/details/82963395")
time.sleep(3)
driver.find_element_by_xpath("//button[@class=' low-height hover-box btn-like ']").click()
print("点赞完成!")
time.sleep(3)
完。。。。
三、完整代码
#CSDN自动点赞
import time,json,random
from selenium import webdriver
#CSDN账号
account_CSDN = "你的账号"
#CSDN密码
password_CSDN = "你的密码"
def CSDN_login():
'''
登录CSDN并保存cookies
'''
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get("https://passport.csdn.net/account/login")
time.sleep(3)
#进入账号密码登录界面
driver.find_element_by_xpath("//a[@class='login-code__open js_login_trigger login-user__active']").click()
time.sleep(3)
#清空账号框中的内容
driver.find_element_by_xpath("//input[@name='username']").clear()
print("账号框清空完成")
#自动填入登录用户名
driver.find_element_by_xpath("//form[@id='fm1']/input[@name='username']").send_keys(account_CSDN)
print("账号输入完成")
#清空密码框中的内容
driver.find_element_by_xpath("//input[@name='password']").clear()
#自动填入登录密码
driver.find_element_by_xpath("//input[@name='password']").send_keys(password_CSDN)
time.sleep(3)
#点击登录
driver.find_element_by_xpath("//input[@class='logging']").click()
#获取并保存cookies
cookies = driver.get_cookies()
with open("cookies.txt", "w") as fp:
json.dump(cookies, fp)
def dianZan(url_list):
'''
实现自动点赞功能
'''
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get("https://blog.csdn.net/qq_38251616/article/details/82963395")
with open("cookies.txt", "r") as fp:
cookies = json.load(fp)
for cookie in cookies:
driver.add_cookie(cookie)
print("cookies加载完成,成功登录")
time.sleep(3)
driver.get("https://blog.csdn.net/qq_38251616/article/details/82963395")
time.sleep(3)
driver.find_element_by_xpath("//button[@class=' low-height hover-box btn-like ']").click()
print("点赞完成!")
time.sleep(3)
if __name__ == '__main__':
url_list = ""
CSDN_login()
dianZan(url_list)
四、后记
如果觉得我写得可以点个赞呗;如果有什么不足的地方,还你希望可以在下方留言告诉我。
我的专栏:【机器学习100天】、【K童鞋的爬虫笔记】
- 由drop datafile导致的oracle bug(r6笔记第56天)
- Java中static关键字的作用
- Java基础-20(02)总结,递归,IO流
- Hive四种数据导入方式
- 34c3 部分Web Writeup
- 原来Oracle也不喜欢“蜀黍"(r6笔记第54天)
- Java基础19(01)总结IO流,异常try…catch,throws,File类
- 使用shell生成orabbix自动化配置脚本(r6笔记第53天)
- 现在 tensorflow 和 mxnet 很火,是否还有必要学习 scikit-learn 等框架?
- 数据的标准化与中心化以及R语言中的scale详解
- Java基础19(02)总结IO流,异常try…catch,throws,File类
- HTML5 — header
- 两条报警信息的分析(第二篇)(r6笔记第71天)
- 两条报警信息的分析(第一篇) (r6笔记第70天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go语言入门(六)结构体后续&指针
- 一天一大 leet(二叉树的序列化与反序列化)难度:困难 DAY-16
- 一天一大 leet(三数之和)难度:中等 DAY-12
- MongoDB Docker版本:基础入门和复制集
- Django连接MySql使用models处理数据
- 一天一大 leet(爬楼梯)难度:简单 DAY-13
- 一天一大 leet(最长公共前缀)难度:简单 DAY-15
- Go语言入门(七)goroutine和channel
- 一天一大 leet(从先序遍历还原二叉树)难度:困难 DAY-18
- Go语言入门(八)线程安全&锁
- 一天一大 leet(最佳观光组合)难度:中等 DAY-17
- Django环境搭建
- javascript 中的位运算符
- python 操作 redis 的一些例子
- mongoDB(一)生产环境基础实践