如何使用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 Requests 基础入门
Apr 07 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
Request的中断和ErrorHandler实例解析
Feb 12 Python
python字符串string的内置方法实例详解
May 14 Python
python中验证码连通域分割的方法详解
Jun 04 Python
python3中eval函数用法使用简介
Aug 02 Python
详解用python计算阶乘的几种方法
Aug 14 Python
Python读取excel文件中带公式的值的实现
Apr 17 Python
基于django micro搭建网站实现加水印功能
May 22 Python
通过实例解析Python RPC实现原理及方法
Jul 07 Python
python简单实现9宫格图片实例
Sep 03 Python
python subprocess pipe 实时输出日志的操作
Dec 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
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
PHP实时显示输出
2008/10/02 PHP
php 将excel导入mysql
2009/11/09 PHP
php类的定义与继承用法实例
2015/07/07 PHP
jQuery替换字符串(实例代码)
2013/11/13 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
Python3 入门教程 简单但比较不错
2009/11/29 Python
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python中functools模块函数解析
2017/03/12 Python
Python画图高斯分布的示例
2019/07/10 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
公司年会晚宴演讲稿
2014/01/06 职场文书
优秀技术工人先进材料
2014/02/17 职场文书
项目经理聘任书
2014/03/29 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
教师党员整改措施
2014/10/24 职场文书
2014年领班工作总结
2014/11/25 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang
解决 redis 无法远程连接
2022/05/15 Redis