Python——通过用户cookies访问微博首页
通过用户cookies访问微博首页
1.登录微博
self.driver.delete_all_cookies() # 删除cookies
self.driver.get(self.url)
time.sleep(2)
user = self.wait.until(EC.presence_of_element_located((By.ID,'loginName')))
pwd = self.wait.until(EC.presence_of_element_located((By.ID, 'loginPassword')))
submit = self.wait.until(EC.presence_of_element_located((By.ID, 'loginAction')))
user.send_keys(self.username)
time.sleep(1)
pwd.send_keys(self.password)
time.sleep(1)
submit.click()
time.sleep(5)
2.获取cooikes,保存json文件
cookies = self.driver.get_cookies()
cookies_dict = {}
for item in cookies:
cookies_dict[item.get('name')] = item.get('value')
with open('sina_cookies.TXT','w',encoding='utf-8') as f:
f.write(json.dumps(cookies_dict, ensure_ascii='False',indent=4))
3..读取json文件,获得cooikes,访问主页
with open('sina_cookies.TXT','r',encoding='utf-8') as f:
cooikes_dict = json.loads(f.read())
response = requests.get('https://weibo.cn/', cookies = cookies_dict, timeout=5, allow_redirects=False)
if response.status_code == 200:
print('用户cookies有效')
4.详细代码
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2018/4/26 0:24
# @Author : hyang
# @File : WeiboCooikes.py
# @Software: import time
import json
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait # 等待元素加载的
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
import requests class WeiboCooikesLogin(object):
"""
通过cookies访问微博
"""
def __init__(self,username, password):
self.url = 'https://passport.weibo.cn/signin/login'
self.driver = webdriver.Chrome()
self.driver.maximize_window() # 最大化窗口
self.wait = WebDriverWait(self.driver, 6)
self.username = username
self.password = password def __del__(self):
"""
关闭浏览器
:return:
"""
print('close browser')
self.driver.close() def open_url(self):
"""
打开url登录微博
:return:
"""
self.driver.delete_all_cookies() # 删除cookies
self.driver.get(self.url)
time.sleep(2)
user = self.wait.until(EC.presence_of_element_located((By.ID,'loginName')))
pwd = self.wait.until(EC.presence_of_element_located((By.ID, 'loginPassword')))
submit = self.wait.until(EC.presence_of_element_located((By.ID, 'loginAction')))
user.send_keys(self.username)
time.sleep(1)
pwd.send_keys(self.password)
time.sleep(1)
submit.click()
time.sleep(5) def password_error(self):
"""
判断用户名密码错误
:return:
"""
try:
return self.wait.until(EC.text_to_be_present_in_element((By.ID,'errorMsg'),'用户名或密码错误'))
except TimeoutException as e:
return False def login_successful(self):
"""
获得登录成功标志
:return:
"""
try:
return self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'drop-title'))) except TimeoutException as e:
return False def process_cookies(self,cookies):
"""
处理cookies
:param cookies:
:return:
"""
cookies_dict = {}
for item in cookies:
cookies_dict[item.get('name')] = item.get('value')
return cookies_dict def save_cookies(self,cookies_dict):
"""
保存cookies
:param cookies_dict:
:return:
"""
with open('sina_cookies.TXT','w',encoding='utf-8') as f:
f.write(json.dumps(cookies_dict, ensure_ascii='False',indent=4)) def get_cookies_main(self):
self.open_url()
if self.password_error():
print('用户名或密码错误')
if self.login_successful():
print('用户登录成功')
cookies = self.driver.get_cookies()
d = self.process_cookies(cookies)
self.save_cookies(d)
print('保存用户cookies成功') def get_cooikes(self):
"""
从文件中读取cookies
:return:
"""
with open('sina_cookies.TXT','r',encoding='utf-8') as f:
cooikes_dict = json.loads(f.read()) return cooikes_dict def login_with_cookies(self, cookies_dict):
"""
通过cookies访问主页读取信息
:param cookies_dict:
:return:
"""
time.sleep(2)
response = requests.get('https://weibo.cn/', cookies = cookies_dict, timeout=5, allow_redirects=False)
if response.status_code == 200:
print('用户cookies有效')
time.sleep(1)
if '我的首页' in response.text:
print('通过cookies登录成功') def login_cookies_main(self):
print('用户开始刷新主页!!')
d = self.get_cooikes()
print('读取用户cookies!!')
self.login_with_cookies(d)
print('通过cookies访问主页!!') if __name__ == '__main__':
username = '' # 新浪微博用户
pwd = '' # 新浪微博用户密码
wb = WeiboCooikesLogin(username, pwd)
wb.get_cookies_main() # 得到cookies
wb.login_cookies_main() # 用cookies访问主页
输出结果

Python——通过用户cookies访问微博首页的更多相关文章
- 利用cookies+requests包登陆微博,使用xpath抓取目标用户的用户信息、微博以及对应评论
本文目的:介绍如何抓取微博内容,利用requests包+cookies实现登陆微博,lxml包的xpath语法解析网页,抓取目标内容. 所需python包:requests.lxml 皆使用pip安装 ...
- python接入微博第三方API之2接入用户登录和微博发布
python接入微博第三方API之2接入用户登录和微博发布 # coding=utf-8 import requests import json import MySQLdb from datetim ...
- (26)基于cookie的登陆认证(写入cookie、删除cookie、登陆后所有域下的网页都可访问、登陆成功跳转至用户开始访问的页面、使用装饰器完成所有页面的登陆认证)
获取cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age ...
- Servlet—Cookie(显示用户上次访问时间、显示商品浏览历史)
1 . 什么是会话? 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 1.1 会话过程中要解决的一些问题? 每个用户在使用浏览器 ...
- 微博API怎么爬取其它未授权用户的微博/怎么爬取指定用户公布的微博
获取某个用户最新发表的微博列表:http://open.weibo.com/wiki/2/statuses/user_timeline 原接口已经被封.很多人都在问怎么获取指定用户的微博,于是写这篇B ...
- Python 中的属性访问与描述符
在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言,点(. ...
- 简单的Cooki案例——记录用户上次访问该网页的时间
功能: 帮助网站实现提示客户端计算机上次访问网站的时间 实现原理: 将每一个会话作为一次访问过程,将每次会话的开始时间作为每次访问网站的时间,然后将这个时间以Cookie的形式存储到客户端的计算机中, ...
- Python中的属性访问与描述符
Python中的属性访问与描述符 请给作者点赞--> 原文链接 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个nam ...
- Python 3.6 抓取微博m站数据
Python 3.6 抓取微博m站数据 2019.05.01 更新内容 containerid 可以通过 "107603" + user_id 组装得到,无需请求个人信息获取: 优 ...
随机推荐
- QUARTZ系列之一-基础概念(Scheduler/Job/JobDetail/Trigger)
摘抄自quartz官方文档: The key interfaces of the Quartz API are: Scheduler - the main API for interacting wi ...
- node.js 使用 net 模块模拟 websocket 握手,进行数据传递。
websocket 是一种让浏览器与服务器之间建立持久的连接,并能进行双向数据传输的一种协议. websocket 属性应用层协议,基于tcp传输协议,并复用http的握手通道. 一.如何进行webs ...
- face_recognition 模块安装
https://blog.csdn.net/qq_15192373/article/details/78623741 https://blog.csdn.net/roguesir/article/de ...
- javascript函数闭包(closure)
一,首先感受下javascript函数的闭包 二,闭包 1,定义:闭包就是能够读取其他函数内部变量的函数,由于在javascript语言中,只有在函数内部的子函数才能够读取局部变量,因此可以把闭包简单 ...
- 现代编译原理--第六章(中间树 IR Tree 含源码)
(转载请表明出处 http://www.cnblogs.com/BlackWalnut/p/4559717.html ) 这一章,就虎书而言,理论知识点是及其少的,就介绍了为什么要有一个中间表示树 ...
- vc++ openssl 程序签名
RSA一般有两种应用场景: 1.公钥加密.私钥解密:这是数据安全通信领域最常见情形: 2.私钥加验.公钥验签:这主要用于数字签名. 我们这里用到的是第二种情况: 这里是基于OpenSSL,首先 ...
- 《C#从现象到本质》读书笔记(九)第11章C#的数据结构
<C#从现象到本质>读书笔记(九)第11章C#的数据结构 C#中的数据结构可以分为两类:非泛型数据结构和泛型数据结构. 通常迭代器接口需要实现的方法有:1)hasNext,是否还有下一个元 ...
- python 常用知识点
1,字典get用法 如果key没有值,返回一个None >>> dic = {'k1':'v1','k2':'v2','k3':'v3'} >>> dic.get( ...
- LAMP简介与部署
lamp简介 lamp,是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是 ...
- GBDT(MART) 迭代决策树详解
在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下: GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Re ...