如何使用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中的join()函数的用法
Apr 07 Python
python分析网页上所有超链接的方法
May 08 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python反射用法实例简析
Dec 22 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
Python 限制线程的最大数量的方法(Semaphore)
Feb 22 Python
Python数据可视化实现正态分布(高斯分布)
Aug 21 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
Python有参函数使用代码实例
Jan 06 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
Python实现AI换脸功能
Apr 10 Python
Python基于数列实现购物车程序过程详解
Jun 09 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
合作指挥官:孟斯克
2020/03/16 星际争霸
全新Mac配置PHP开发环境教程
2016/02/03 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
德国旅游网站:weg.de
2018/06/03 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
劳动之星获奖感言
2014/02/01 职场文书
员工培训邀请函
2014/02/02 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
产品设计开发计划书
2014/05/07 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS