如何使用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实现简易端口扫描器代码实例
Mar 15 Python
老生常谈python函数参数的区别(必看篇)
May 29 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
Python遍历pandas数据方法总结
Feb 09 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 Python
python列表推导式入门学习解析
Dec 02 Python
如何使用Python破解ZIP或RAR压缩文件密码
Jan 09 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
Python 解决空列表.append() 输出为None的问题
May 23 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邮件发送的两种方式
2020/04/28 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
利用python程序帮大家清理windows垃圾
2017/01/15 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
django orm模块中的 is_delete用法
2020/05/20 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
项目经理的岗位职责
2013/11/23 职场文书
公证书样本
2014/04/10 职场文书
企业文化标语口号
2014/06/09 职场文书
卫生标语大全
2014/06/21 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
财务部会计岗位职责
2015/02/03 职场文书
青年志愿者活动感想
2015/08/07 职场文书
找规律教学反思
2016/02/23 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
Pandas-DataFrame知识点汇总
2022/03/16 Python
vue的项目如何打包上线
2022/04/13 Vue.js