# Author:Nimo_Ding
'''
最终优化:
1、登录的时候自动调用cookies,就不用每次输入用户名和密码了。
2、如果程序能读取到cookies,就自动登录发表评论,如果读取不到,就重新输用户名密码登录后再评论。
cookies转化成字典的方法:
requests.utils.dict_from_cookoejar(cj)
cj:从中提取cookie的CookieJar对象
返回类型:字典
json模块使用方法:
json.dumps() # 将Python对象编码成Json字符串
json.loads() # 将json字符串解码成Python对象
'''
# 登录:
import requests
import json
session=requests.session()
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
}
def cookies_read():
# 读取cookies:
# 字符串格式的cookies -> 通过json转成字典格式 -> 通过requests转成cookies原本的格式。
cookies_txt=open('08cookies.txt','r')
cookies_dict=json.loads(cookies_txt.read()) # 转成字典
cookies=requests.utils.cookiejar_from_dict(cookies_dict) # 转成cookies本来的格式
return(cookies)
# 调用requests对象(session)的cookies属性
def sign_in():
url = ' https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php'
data = {
'log':input('请输入账号:'),
'pwd':input('请输入密码:'),
'wp-submit': '登录',
'redirect_to': 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn',
'testcookie': '1'
}
session.post(url,data=data,headers=headers)
# 在创建的session下用post发起登录请求。
# 保存cookies:
# 把cookies转化成字典:
cookies_dict=requests.utils.dict_from_cookiejar(session.cookies)
# 调用json模块,把cookies再转成字符串
cookies_str=json.dumps(cookies_dict) #
f=open('08cookies.txt','w') # 将cookies写入文件中
f.write(cookies_str)
f.close()
def write_message():
# 开始评论:
comment_url = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-comments-post.php'
comment_data = {
'comment': input('请输入评论:'),
'submit': '发表评论',
'comment_post_ID': 20,
'comment_parent': 0,
}
return(session.post(comment_url,headers=headers,data=comment_data))
try:
session.cookies=cookies_read()
except FileNotFoundError:
sign_in()
num=write_message()
if num.status_code==200:
print('已评论成功!')
else:
sign_in()
num=write_message()
'''
补充:
计算机之所以需要cookies和session,是因为HTTP协议是无状态的协议。
无状态:
一旦浏览器和服务器之间的请求和响应完毕后,两者会立马断开连接,也就是恢复成无状态。这样就会导致
服务器永远也无法记住用户的信息
cookies不仅实现了自动登录,因为它本身携带了session的编码信息,网站会根据cookies记录你的足迹推送符合你偏好的商品。
'''