如何使用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实现远程调用MetaSploit的方法
Aug 22 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
python操作列表的函数使用代码详解
Dec 28 Python
Python实现多属性排序的方法
Dec 05 Python
python脚本之一键移动自定格式文件方法实例
Sep 02 Python
python中Lambda表达式详解
Nov 20 Python
python [:3] 实现提取数组中的数
Nov 27 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
Dec 13 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
使用python实现CGI环境搭建过程解析
Apr 28 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 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
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
PHP中文乱码解决方案
2015/03/05 PHP
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
清除输入框内的空格
2016/12/21 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
详解Swift中属性的声明与作用
2016/06/30 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
Python生成随机密码的方法
2017/06/16 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
Python数学形态学实例分析
2019/09/06 Python
python str字符串转uuid实例
2020/03/03 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
印度购物网站:TATA CLiQ
2017/11/23 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
房地产出纳岗位职责
2013/12/01 职场文书
经理管理专业自荐信范文
2013/12/31 职场文书
电教室标语
2014/06/20 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
2014年班干部工作总结
2014/11/25 职场文书
工作推荐信模板
2015/03/25 职场文书
后天观后感
2015/06/08 职场文书
golang正则之命名分组方式
2021/04/25 Golang
js实现模拟购物商城案例
2021/05/18 Javascript
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android