在scrapy 使用selenium模拟登录获取cookie

这篇具有很好参考价值的文章主要介绍了在scrapy 使用selenium模拟登录获取cookie。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近有一点点爬虫需求,想总结一下scrapy框架的一些基本使用方法,加深印象,自己一直习惯使用一些脚本文件运行爬虫,面对数据量非常大,稳定性要求比较高的,效率需求比较高的情况下还是用scrapy较为合适,scrapy是一个异步的框架,所有的请求都是阻塞的,虽然在单文件脚本中也可以实现,但是代码就非常的难看,难以维护,过了几天就会忘记复杂的流程,调试起来就非常的困难,scrapy我自己用得也不多,但是觉得它非常地优秀,有成熟的中间件支持,方便的下载器,稳定性效率非常地高,但是其中的运行流程也稍微有些复杂,难以理解,异步框架处理BUG调试非常的麻烦。

初始化scrapy

首选需要安装scrapy 和selenium框架。

pip install scrapy

pip install selenium

  初始化框架

scrapy startproject testSpider

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具

依据参考接着进入文件夹,新建爬虫文件。

cd testSpider

scrapy genspider myspider example.com

看看目录

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具

selenium基本使用

selenium前言

今天只讲selenium的基本使用,scrapy框架的流程后面再总结,为什么要在在scrapy中使用selenium,因为有些目标站点的接口是通过分析非常难以复现的,通常会有一些混淆参数导致出现请求遇到拦截的情况,也就是碰到反爬虫措施了,需要分析Javascript代码,分析其中参数的意思,这种过程非常的复杂,工程量非常大,这也是目前高级爬虫的必备知识,需要一些Javascript逆向知识,例如行业中有非常著名的瑞数信息做了翻盘是属于顶尖的存在,专门在一些金融,政府网站上使用这种Javascript代码混淆技术,自己也是稍微了解了一点点。

通过selenium可以绕过一些关键的有反扒的接口,得到一些重要的信息。通常的情况就是使用selenium模拟有反爬措施的登录接口从而得到登录后cookie,然后登陆过后的接口就没有反爬措施。

下载驱动

使用selenium就需要配套的浏览器驱动。我配套的浏览器就是chrome,我自己的浏览器版本。

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具

下载的版本:

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具

然后我把浏览器驱动放在浏览器的目录,然后配置了环境变量:

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具

关键代码

testSpider/spider/myspider.py就是关键代码,目前的代码如下:

  import scrapy
  class MyspiderSpider(scrapy.Spider):
      name = 'myspider'
      allowed_domains = ['example.com']
      start_urls = ['http://example.com/']
      def parse(self, response):
          pass

根据文章标题的需求我只需要使用在以上的文件进行编码就行了,加入要使用到其他的接口爬取方法就要去更改testSpider/setting.py里面的设置,如果感兴趣可以参考我之前的文章:使用Scrapy框架爬取V2ex看看程序员中秋节都在讨论啥

直接亮代码,拿七牛云的登录试了一下,因为感觉他比较简单,步骤较少,适合做教程分享,详细情况在注释中讲解:

  import scrapy
  from selenium.webdriver.chrome.options import Options
  from selenium import webdriver
  from selenium.webdriver.common.by import By
  from selenium.webdriver.support.wait import WebDriverWait
  from selenium.webdriver.support import expected_conditions as EC
  class MyspiderSpider(scrapy.Spider):
      name = 'myspider'
      allowed_domains = ['portal.qiniu.com'] # 注意设置好允许爬取的网址列表,这里踩了坑,试了半天发现框架默认的解析器一直没有调用,要写网址的整合域名而不是单单一级域名。
      start_urls = ['http://example.com/']
      user_name = '********@**.com'
      password = '********'
      chorme_options = Options()
      chorme_options.add_argument("--disable-gpu")
      driver = webdriver.Chrome(options=chorme_options)  # 初始化Chrome驱动
      driver.implicitly_wait(20)
      headers = {
          'authority': 'portal.qiniu.com',
          'accept': '*/*',
          'accept-language': 'zh-CN,zh;q=0.9',
          'cache-control': 'no-cache',
          'referer': 'https://portal.qiniu.com/certificate/ssl',
          'sec-ch-ua': '".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"',
          'sec-ch-ua-mobile': '?0',
          'sec-ch-ua-platform': '"Windows"',
          'sec-fetch-dest': 'empty',
          'sec-fetch-mode': 'cors',
          'sec-fetch-site': 'same-origin',
          'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36',
      }  # header
      cookie = {}
      def __del__(self):
          self.driver.close()
      def parse(self, response, *args, **kwargs):
          print('默认的解析器方法,接口请求内容:')
          print(response.json())
      def start_requests(self):
          self.driver.get(url='https://sso.qiniu.com/')  # 直接访问登录页
          user_input = self.driver.find_element(By.ID, 'email')  # 获取用户名输入框
          user_input.send_keys(self.user_name)  # 输入用户名
          password_input = self.driver.find_element(By.ID, 'password')  # 获取密码框
          password_input.send_keys(self.password)  # 输入密码
          self.driver.find_element(By.ID, 'login-button').click()  # 登录
          try:
              WebDriverWait(self.driver, 60).until(EC.visibility_of_element_located(
                  (By.CLASS_NAME, "user-plane-entry")))  # 等待网页跳转,超时等待60秒
          except:
              print('登陆超时,失败')  # 等待超过了60
              self.driver.quit()
          self.cookie = self.driver.get_cookies()  # 获取cookie 此时是键值对
          print(self.cookie)
          print(self.headers)
          yield scrapy.Request(url='https://portal.qiniu.com/api/gaea/billboard/list?status=1', callback=self.parse,
                               cookies=self.cookie,
                               headers=self.headers)  # 迭代器 放入异步任务中请求

 从日志看看效果:

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具

已经正确打印了接口返回的内容,假如直接请求接口会报错: 

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具

总结

在scrapy 中使用selenium是一个非常常见的情况,今天只稍微做一下简单的总结,以后碰到的难点会一一记下来分享出来,敬请期待。

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具

全部资料获取

scrapy 获取cookie,职场经验,软件测试,程序员,单元测试,自动化测试,职场和发展,软件测试面试,scrapy,selenium,测试工具文章来源地址https://www.toymoban.com/news/detail-679674.html

到了这里,关于在scrapy 使用selenium模拟登录获取cookie的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python爬虫进阶篇:Scrapy中使用Selenium模拟Firefox火狐浏览器爬取网页信息

    接着上一篇的笔记,Scrapy爬取普通无反爬、静态页面的网页时可以顺利爬取我们要的信息。但是大部分情况下我们要的数据所在的网页它是动态加载出来的(ajax请求后传回前端页面渲染、js调用function等)。这种情况下需要使用selenium进行模拟人工操作浏览器行为,实现自动化

    2024年02月04日
    浏览(45)
  • Selenium自动化测试框架中使用Cookies绕过登录

    在使用selenium测试后台时常常每个流程都需要走登录流程,这样自然比较浪费时间。如果遇到登录需要输入验证码等情况,就可能出师未捷身先死。 在Web应用中,登录状态通常是通过Cookie中对应的session id验证的。也是就是说,我们只要携带上登录后的Cookies,浏览器就会自动

    2024年02月09日
    浏览(33)
  • 使用selenium驱动浏览器时携带cookie实现模拟登陆

    selenium可以帮助我们驱动浏览器打开网页,并进行一些特定的操作。但是现在越来越多的网站,也会识别selenium,并且限制了访问条件,比如:必须登录。 在selenium中,get_cookies()方法可以帮助我们获取cookie。这里以知乎为例演示一下使用。 这里用到的浏览器驱动对象为 unde

    2024年04月14日
    浏览(32)
  • 【java爬虫】使用selenium通过加载cookie的方式跳过登录

    前言 相信很多人在使用selenium的时候都有一个困惑,就是每一次打开的浏览器实例都是不带cookie的,当有一些页面需要登录操作的时候可能就会比较麻烦,每次都需要手动登录。 其实会造成这个问题的原因是每次打开的浏览器都不会加载本地的cookie,相当于环境被隔离了。

    2024年04月12日
    浏览(31)
  • (待完善)2023-selenium 实现知乎自动登录(第三方登录/使用cookie自动登录)+指定用户的信息相关搜集(2023.3)

    叠甲:本文写作目的仅为本人学习参考、实现功能为课程实验要求、本文写作过程处于作者对于爬虫技术学习的过程,部分代码编写时水平还不够,出现的错误比较多、部分变量名字又臭又长,水平有限,请各位给我的作业汇报留条活路[拜托],请不要卷我,如果发现有什么

    2023年04月10日
    浏览(32)
  • 2023最新详细:使用selenium携带cookie登录QQ空间,爬取指定好友空间说说照片

    写在前面:最近学了爬虫,正好爬取一下指定好友的所有空间说说照片,之前使用selenium账号密码登录,模拟登录次数过多,会加验证码,甚至导致QQ冻结,所以采用cookie登录 思路 首先获取cookie,使用cookie登陆之后通过空间好友栏搜索指定好友,并进入好友空间,从而爬取说

    2024年02月13日
    浏览(31)
  • vue 前端登录获取token后添加到cookie,并使用token获取其他数据(添加到请求头中)

    1.登录获取到token存到cookie中   这里我的cookie设置为一天失效 cookie.js代码如下 main.js导入到全局使用 request.js请求头添加token   最后浏览器可查看到   并且下一次发请求时候请求参数中可查看到

    2024年02月15日
    浏览(28)
  • python使用selenium模拟登录网页页面

    python的selenium用于自动化测试,但是在自动化测试的时候也可以用来模拟登录,本次用selenium模拟登录某DN网页 代码如下(示例): 本次使用的是谷歌的内核若有需要,也可以换其他浏览器的内核 首先打开CSDN页面准备在页面中定位元素 为方便操作,直接在开发者界面中复制

    2024年02月13日
    浏览(24)
  • Python爬虫-使用Selenium模拟百度登录

        前面我已经安装好了Selenium并模拟成功了一下打开百度页面并进行查询,让我这个python初学者信心倍增,今天再来试一试百度登录 把打开百度的代码放到构造方法中 ps:那个文件目录是用于后面滑块验证图片保存的。 点击右上角的“登录”按钮,打开登录框, 代码如下:

    2024年02月06日
    浏览(40)
  • Scrapy第十一(①)篇:selenium4模拟器中间件

    为什么要使用模拟器? 在使用request的时候,大型网站都有很多的反爬机制,典型比如滑动验证码、弹窗广告、弹窗验证、登录认证、Ajax异步加载...等等,这些是request很难绕过去的。这时候可以使用selenium模拟器来模拟用户操作:Selenium可以根据的指令,让浏览器自动加载页

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包