如何使用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 相关文章推荐
Django中实现一个高性能计数器(Counter)实例
Jul 09 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
python取代netcat过程分析
Feb 10 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
DJANGO-URL反向解析REVERSE实例讲解
Oct 25 Python
Python实现word2Vec model过程解析
Dec 16 Python
pytorch中的inference使用实例
Feb 20 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
Windows下Sqlmap环境安装教程详解
Aug 04 Python
Python爬取网页信息的示例
Sep 24 Python
Python基本的内置数据类型及使用方法
Apr 13 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
一个程序下载的管理程序(一)
2006/10/09 PHP
关于php mvc开发模式的感想
2011/06/28 PHP
PHP异步调用socket实现代码
2012/01/12 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
CI框架安全类Security.php源码分析
2014/11/04 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
Python正则表达式介绍
2012/08/06 Python
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
跟老齐学Python之再深点,更懂list
2014/09/20 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
详解python持久化文件读写
2019/04/06 Python
pytorch SENet实现案例
2020/06/24 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
关于安全的标语
2014/06/10 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
2014年工程师工作总结
2014/11/25 职场文书
雷峰塔导游词
2015/02/09 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
Python3的进程和线程你了解吗
2022/03/16 Python
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL