如何巧妙的利用selenium和requests组合来进行操作需要登录的页面
一、在这里selenium的作用
(1)模拟的登录。
(2)获取登录成功之后的cookies
代码
def start_login(self):
chrome_options = Options()
# 禁止图片加载,禁止推送通知
prefs = {
"profile.default_content_setting_values": {
"images": 2
}, "profile.default_content_setting_values.notifications": 2
}
chrome_options.add_experimental_option("prefs", prefs)
if chrome_args().get("headless_flag") == "1":
chrome_options.add_argument(chrome_args().get("headless"))
chrome_options.add_argument(chrome_args().get("nogpu"))
chrome_options.add_argument(chrome_args().get("noinfobars"))
chrome_options.add_argument(chrome_args().get("max_windows"))
chrome_options.add_argument(self.Proxy_server) driver = webdriver.Chrome(chrome_options=chrome_options)
try:
get_logger().info("start login.....")
try:
# login info
self.login_name = self.loginInfo.get("login_id")
self.password = aes_cbc_decrypt(self.loginInfo.get("login_pwd"))
except Exception:
get_logger().error("cant get login info,here are detals".format(traceback.format_exc()))
wait = WebDriverWait(driver, 30)
print(u"start login in")
driver.get(self.login_url)
try:
login_id = wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.Id_xpath))
)
login_id.send_keys(self.login_name)
login_id.send_keys(Keys.ENTER)
password = wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.pwd_xpath))
)
password.send_keys(self.password)
submit = wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.login_btn_xpath))
)
submit.click()
# login signal
#判断是否显示 右上角是否显示用户名
login_ok = wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.login_ok_xpath))
)
try:
#判断登录成功
if login_ok:
get_logger().info("get user name successful:"+u"{}".format(login_ok.text))
try:
get_weibo_info=driver.find_element_by_xpath(self.forward_home_page)
except: driver.get(self.first_page) forward_home_page_ok = wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.forward_home_page))
)
forward_home_page_ok.click()
time.sleep(5)
self.first_page=driver.current_url
get_logger().info("get homepage successful,url is {}".format(driver.current_url))
cookies = driver.get_cookies() # 导出cookie
get_logger().info("get cookies")
get_fansnum_ok= wait.until(
eccd.presence_of_element_located(
(By.XPATH, self.follow_xpath))
)
self.get_followfanshome(driver)
get_logger().info("get_followfanshome ok")
self.home_page_source=driver.page_source
driver.close() # 关闭chrome
#获取主页的
# 如果需要保存cookies
self.write_cookie(cookies)
get_logger().info("get cookies,login ok")
return cookies else:
raise RuntimeError('login failed')
except:
get_logger().error("login failed")
return None except:
if driver is not None:
driver.close()
except Exception as e:
if driver is not None:
driver.close()
get_logger().error("dbs operation error,here are details:{}".format(traceback.format_exc()))
通过使用cookies = driver.get_cookies() #我们获取了cookie那么我们怎用呢。
二、requests如何使用获取到的cookies
1.创建一个Session对象
req = requests.Session() # 构建Session
2.转换上面的cookies对象
for cookie in cookies:
req.cookies.set(cookie['name'], cookie['value']) # 转换cookies
3.开始访问该网站的需求页面
data = req.get(url, headers=self.headers).text #获取文本网页
jsondata = req.get(url, headers=self.headers).json() #获取json型网页
好了就是这么简单,另外补充一个经常使用的库fake-useragent,可以获取随机的useragent,但是其中谷歌的useragent版本比较低,尤其在访问知乎的时候,会提示浏览器版本低的信息,这一点需要注意。
另外拥有一个headers是对爬虫起码的尊重,所以有个构建好的headers是非常必要的。我就经常用下面的例:
from fake_useragent import UserAgent as UA
import random headers = {
'Accept': 'text/html, application/xhtml+xml, image/jxr, */*',
'Accept - Encoding': 'gzip, deflate',
'Accept-Language': 'zh-Hans-CN, zh-Hans; q=0.5',
'Connection': 'Keep-Alive',
'User-Agent': UA().random #获取随机的useragent
}
如何巧妙的利用selenium和requests组合来进行操作需要登录的页面的更多相关文章
- 【python爬虫】利用selenium和Chrome浏览器进行自动化网页搜索与浏览
功能简介:利用利用selenium和Chrome浏览器,让其自动打开百度页面,并设置为每页显示50条,接着在百度的搜索框中输入selenium,进行查询.然后再打开的页面中选中“Selenium - ...
- requests利用selenium,代理Ip,云打码,验证码抠图操作 爬取搜狗微信公众号内容
爬取思路,爬取搜狗微信公众号内容,爬取第一层url时请求太快出现验证码,我这里用的蘑菇云代理,并在程序中我判断什么情况下是否+代理,做到合理运用代理ip.爬取第二层url时验证码出现次数更严重(和第一 ...
- 利用Selenium自动化web测试
简介: Selenium 是一个没有正式指导手册的开源项目,这让测试人员的问题调查很费时间.本文为基于 Selenium 1.0(发布于 2009 年 6 月)的测试期间的常见问题提供最佳实践. 简介 ...
- 利用Selenium和Browsermob批量嗅探下载Bilibili网站视频
Rerence: http://www.liuhao.me/2016/09/20/selenium_browsermob_sniff_bilibili_video/ 日常生活中,用电脑看视频是非常频繁 ...
- Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...
- python中用分别用selenium、requests库实现Windows认证登录
最近在搞单位的项目,实现python自动化,结果在第一步就把我给拒之门外,查资料问大佬,问我们开发人员,从周一折腾到周五才搞定了 接下给大家分享一下 项目背景:我们系统是基于Windows平台实现的, ...
- 利用selenium模拟登陆
第一部:利用selenium登陆 导入selenium库 from selenium import webdriver 明确模拟浏览器在电脑中存放的位置,比如我存在当前目录 chromePath = ...
- python利用selenium库识别点触验证码
利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路) 一.超级鹰注册:超级鹰入口 1.首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分 ...
- 利用selenium爬取京东商品信息存放到mongodb
利用selenium爬取京东商城的商品信息思路: 1.首先进入京东的搜索页面,分析搜索页面信息可以得到路由结构 2.根据页面信息可以看到京东在搜索页面使用了懒加载,所以为了解决这个问题,使用递归.等待 ...
随机推荐
- jenkins中使用rsync, scp命令
jenkins 中使用 rsync 命令 是出现一些错误输出 Host key verification failed. rsync: connection unexpectedly closed ( ...
- 4、flask之分页插件的使用、添加后保留原url搜索条件、单例模式
本篇导航: flask实现分页 添加后保留原url搜索条件 单例模式 一.flask实现分页 1.django项目中写过的分页组件 from urllib.parse import urlencode ...
- [NOIP2001提高组]数的划分
题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输 ...
- linux下安装jdk,tomcat以及mysql
环境:centOS6.8.jdk1.8,tomcat-8.5.15,mysql-5.7.18 1. 安装JDK 注意:rpm与软件相关命令 相当于window下的软件助手 管理软件 步骤: 1)查看 ...
- vue——安装并新建项目
一.对于vue的安装: 1.安装vue之前先安装node,https://nodejs.org/zh-cn/download/,我装的是windows64位的: 2.下载好了之后就可以按照正常顺序安装 ...
- java网络编程(3)——UDP
UDP在java中主要使用DatagramSocket来实现通讯,数据一般是通过DatagramPacket来封装: 发送方只需指定接受方的地址和端口,然后通过send()方法就可以把封装在Datag ...
- SpringBoot整合SpringSecurity,SESSION 并发管理,同账号只允许登录一次
重写了UsernamePasswordAuthenticationFilter,里面继承AbstractAuthenticationProcessingFilter,这个类里面的session认证策略 ...
- 记录 serverSocket socket 输入,输出流,关闭顺序,阻塞,PrintWriter的一些问题.
关于socket.getOutputStream() 的一些问题, OutputStream的flush是一个空方法,所以需要另一个实现了Flush的流来包装一下 这里为什么使用PrintWriter ...
- Python基于Flask框架配置依赖包信息的项目迁移部署小技巧
一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...
- zTree实现地市县三级级联数据库映射
zTree实现地市县三级级联数据库映射 Province.hbm.xml: <?xml version="1.0" encoding="UTF-8"?&g ...