如何使用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 相关文章推荐
初步剖析C语言编程中的结构体
Jan 16 Python
django允许外部访问的实例讲解
May 14 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
python3实现逐字输出的方法
Jan 23 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
在python中利用numpy求解多项式以及多项式拟合的方法
Jul 03 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 Python
用python对excel查重
Dec 07 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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/10/09 PHP
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
PHP对象Object的概念 介绍
2012/06/14 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python选择排序算法实例总结
2015/07/01 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
驾驶员岗位职责
2014/01/29 职场文书
股票投资建议书
2014/05/19 职场文书
投标服务承诺书
2014/05/28 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
三方协议书
2015/01/27 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python