如何使用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使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
Python 多核并行计算的示例代码
Nov 07 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
对python多线程中Lock()与RLock()锁详解
Jan 11 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
python实现键盘输入的实操方法
Jul 16 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
python烟花效果的代码实例
Feb 25 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
Python是怎样处理json模块的
Jul 16 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 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
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
php生成扇形比例图实例
2013/11/06 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
vue.js路由跳转详解
2017/08/28 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
Django发送html邮件的方法
2015/05/26 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
学生会主席就职演讲稿
2014/01/14 职场文书
社区活动邀请函范文
2014/01/29 职场文书
致青春观后感
2015/06/09 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL