如何使用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使用BeautifulSoup分析网页信息的方法
Apr 04 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
django框架防止XSS注入的方法分析
Jun 21 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
Python绘制动态水球图过程详解
Jun 03 Python
python能自学吗
Jun 18 Python
pandas按条件筛选数据的实现
Feb 20 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 一个比较完善的简单文件上传
2010/03/25 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
prototype class详解
2006/09/07 Javascript
javascript 鼠标滚轮事件
2009/04/09 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
AngularJS入门之动画
2016/07/27 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
VUE预渲染及遇到的坑
2018/09/03 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
简单的Apache+FastCGI+Django配置指南
2015/07/22 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
python版大富翁源代码分享
2018/11/19 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
中科方德软件测试面试题
2016/04/21 面试题
员工考核管理制度
2014/02/02 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
5s推行计划书
2014/05/06 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
婚庆答谢词大全
2015/09/29 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
vue使用echarts实现折线图
2022/03/21 Vue.js
java开发双人五子棋游戏
2022/05/06 Java/Android
Python 中面向接口编程
2022/05/20 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python