如何使用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 SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
跟老齐学Python之使用Python查询更新数据库
Nov 25 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
windows下安装Python的XlsxWriter模块方法
May 03 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
Python 一键制作微信好友图片墙的方法
May 16 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
Python中request的基本使用解决乱码问题
Apr 12 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的网址
2006/11/25 PHP
收集的php编写大型网站问题集
2007/03/06 PHP
PHP syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
为输入框加入数字js校验代码分享
2017/11/02 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
Python字符串格式化输出方法分析
2016/04/13 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
Python中url标签使用知识点总结
2020/01/16 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
恶意软件的定义
2014/11/12 面试题
医药代表个人求职信范本
2013/12/19 职场文书
中秋节超市促销方案
2014/01/30 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
python Django框架快速入门教程(后台管理)
2021/07/21 Python
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis