如何使用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 logging 日志轮转文件不删除问题的解决方法
Aug 02 Python
Python绘制七段数码管实例代码
Dec 20 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
使用python对多个txt文件中的数据进行筛选的方法
Jul 10 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
Python3搭建http服务器的实现代码
Feb 11 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
Python selenium文件上传下载功能代码实例
Apr 13 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 Python
python中id函数运行方式
Jul 03 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
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python非递归全排列实现方法
2017/04/10 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
Django REST 异常处理详解
2020/07/15 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
初中英语演讲稿
2014/04/29 职场文书
学校校庆演讲稿
2014/05/22 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
2014年学习部工作总结
2014/11/12 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
用Python写一个简易版弹球游戏
2021/04/13 Python