如何使用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之编写简单乘法口诀表实现代码
Feb 27 Python
Python模块搜索路径代码详解
Jan 29 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
python3转换code128条形码的方法
Apr 17 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
Django中的FBV和CBV用法详解
Sep 15 Python
python argparser的具体使用
Nov 10 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
May 23 Python
什么是python的函数体
Jun 19 Python
Sentry错误日志监控使用方法解析
Nov 12 Python
详解python字符串驻留技术
May 21 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
PHP的中问验证码
2006/11/25 PHP
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
python实现socket端口重定向示例
2014/02/10 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
Python Requests库基本用法示例
2018/08/20 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
python中uuid模块实例浅析
2020/12/29 Python
免税水晶:Duty Free Crystal
2019/05/13 全球购物
环保倡议书100字
2014/05/15 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
环保志愿者活动总结
2014/06/27 职场文书
六一儿童节开幕词
2015/01/29 职场文书
高考1977观后感
2015/06/04 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python