如何使用selenium和requests组合实现登录页面


Posted in Python onFebruary 03, 2020

这篇文章主要介绍了如何使用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
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python多线程学习资料
Dec 19 Python
linux下安装easy_install的方法
Feb 10 Python
Python Property属性的2种用法
Jun 21 Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
python实现自动网页截图并裁剪图片
Jul 30 Python
python的debug实用工具 pdb详解
Jul 12 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
Dec 01 Python
Python多个MP4合成视频的实现方法
Jul 16 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 #Python
Tensorflow 实现释放内存
Feb 03 #Python
手把手教你进行Python虚拟环境配置教程
Feb 03 #Python
解决TensorFlow GPU版出现OOM错误的问题
Feb 03 #Python
python global和nonlocal用法解析
Feb 03 #Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 #Python
解决Tensorflow占用GPU显存问题
Feb 03 #Python
You might like
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
JavaScript OOP面向对象介绍
2010/12/02 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
JavaScript的Backbone.js框架入门学习指引
2016/05/07 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
Three.js基础学习教程
2017/11/16 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
Python中replace方法实例分析
2014/08/20 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Python判断telnet通不通的实例
2019/01/26 Python
Python编写打字训练小程序
2019/09/26 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
python实现从ftp服务器下载文件
2020/03/03 Python
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
小区门卫岗位职责
2013/12/31 职场文书
英语商务邀请函范文
2014/01/16 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
运动会开幕式主持词
2014/03/28 职场文书
群众路线学习笔记范文
2014/11/06 职场文书