百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 软件资讯 > 正文

Selenium爬虫实践:ajax请求抓包、浏览器退出

ninehua 2024-12-06 18:08 36 浏览

前言

  最近在搞公司内部系统,累的一批,需要从另一个内部系统导出数据存到数据库做分析,有大量的数据采集工作,又没办法去直接拿到那个系统的接口,太难了,只能爬虫,但是cookie还经常失效,为了不每次登录失效就来找我重新注入Cookie,我写了一个手机版的网页,用来控制后台的selenium自动登录,截取token和cookie。


  ajax请求抓包方案

  搜索资料的过程真的痛苦,不过还好这时间没有白花,最终还是解决了问题……

  根据找到的资料,有以下几种方法可以在Selenium中抓取ajax请求中的数据。

  ·使用本地代理:browsermob-proxy

  · 使用selenium的执行js功能注入 ajax hook 并执行,然后本地开一个服务器接收拦截到的ajax数据

  · 用第三方库selenium-wire,这个是一个GitHub上的开源项目,可以直接截取response_code和body,原理应该走的也是代理

  · 开启selenium的性能抓取,在性能日志里面可以做改动,以拦截response_body

  使用本地代理

  本文使用Browsermob-Proxy这个代理服务器,这个是用Java写的,有一个python封装的接口包可以方便交互……

  先去下载:https://github.com/lightbody/browsermob-proxy/releases

  安装python包:

  pip install browsermob-proxy

  在代码中使用,这里我截取了项目的部分代码,随便看看就好了,完整代码可以看官网文档或者参考资料~

  有几个需要注意的坑的地方,我在代码中标出了。

  # 创建代理服务器

  self.server = Server(

   # Windows就是bat,如果Linux就是另一个不带后缀名的

   r'path\bin\browsermob-proxy.bat',

   # 这里可以自定义端口

   options={'port': 9090}

  )

  # 这里启动服务器,等会机会要关掉,不然下次用就端口占用冲突了

  self.server.start()

  # 注意这里一定要 trustAllServers 不然等会selenium会报 error_tunnel 错误

  self.proxy = self.server.create_proxy(params={'trustAllServers': 'true'})

  # 设置selenium的代理

  options = ChromeOptions()

  options.add_argument('--ignore-certificate-errors')

  options.add_argument(f'--proxy-server={self.proxy.proxy}')

  self.driver = webdriver.Chrome(options=options)

  使用代理来进行抓包,我这个项目需要在ajax请求的header里面提取出token和cookie,截取了关键部分的代码如下:

  self.proxy.new_har('抓包名称 自己起一个', options={'captureHeaders': True, 'captureContent': True})

  # 找到需要点击的元素

  elem_query = self.driver.find_element_by_css_selector(elem_css_selector)

  elem_query.click()

  # 点击按钮后等待 并把数据取出来

  time.sleep(5)

  result = self.proxy.har

  data = {}

  for entry in result['log']['entries']:

   url = entry['request']['url']

   # 根据URL找到数据接口

   if 'xxx/query' in url:

   _response = entry['response']

   _content = _response['content']['text']

   for item in entry['request']['headers']:

   # 提取出header里面的 token

   if item['name'] == 'Authorization':

   data['authorization'] = item['value']

   # 提取出header里面的 cookie

   if item['name'] == 'Cookie':

   data['cookie'] = item['value']

   break

  print(data)

  以上代码同样不是完整代码,不过已经将具体抓包的过程完整表达出来,需要的同学可以根据自己的实际需求进行编码,只要能抓到数据,一切都好说~

  浏览器和代理服务器退出

  这个没啥好写的,但是也有一个小坑,水一下吧~

  从上面的代码里也可以看出来,我写了一个类来操作Selenium,程序执行完了肯定要把代理和服务器关了,不然selenium会留着一个 chromedriver.exe 的进程在后台占用资源,时间一长,系统内存都满了。

  我在类的__del__方法中加入了关闭代理服务器和浏览器的代码,如下:

  def __del__(self):

   print('SeleniumFxxkUnicom has been deleted.')

   self.proxy.close()

   self.server.stop()

   for win in self.driver.window_handles:

   self.driver.switch_to.window(win)

   self.driver.close()

   os.system('taskkill /im chromedriver.exe /F')

  注意这个循环的driver.close(),在__del__里是没办法正常执行driver.quit()的,按理说quit才是最好的退出方法,但是他还要导入什么鬼乱七八糟的模块,导致我在这个__del__里执行失败,于是只好曲线救国,先把全部标签页关闭,然后用系统命令结束掉进程……

相关推荐

VMware ESXI系统镜像定制

为什么要定制ESXi镜像呢?原因很简单,那就是H3C比较老的服务器,比如我用的UISR390XG2服务器,是没有适配的ESXi部署镜像的。而我要部署的H3CloudOS添加节点时只能选择H3C...

最新保姆级、超详细介绍VMware的使用(一)软件的安装

一、VMware简介VMWare虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMware采用了完全不同的概...

微软提供免费Windows 11 虚拟机下载

据ZDNet11月23日报道,微软(Microsoft)提供了免费的Windows11企业版虚拟机以供下载。针对开发人员,微软表示,“通过使用带有最新版本的Windows、开发工具、sdk和准备好的...

VMware Workstation Pro 17.5安装包下载安装教程

软件简介VMwareWorkstationPro17.5是一款专业功能最强大的虚拟机软件,用户可以在虚拟机同时运行各种操作系统,进行开发、测试、演示和部署软件,虚拟机中复制服务器、台式机和平板环...

VMware vCenter Server 8.0U3c 发布下载,修复 U3b 更新停止响应的问题

VMwarevCenterServer8.0U3c发布下载,修复U3b更新停止响应的问题VMwarevCenterServer8.0U3c发布下载-集中式管理vSphere...

最新整套VMware Workstation 15 Pro 官方简体中文版 + 永久密钥

VMwareWorkstation是深受全球用户信赖并屡获殊荣的虚拟机软件。它可以在单台PC上运行多个、多平台、多层面的操作系统与应用程序。并且支持快照和克隆,支持物理机与虚拟机间复制、移动,交...

VMware16虚拟机安装教程

系统装机教程也告一段落,接下来秋水给大家讲讲虚拟机的安装,这里呢虚拟机选择VMware。一、安装教程1、在软件官网下载VMware安装包,或者在后台回复获取秋水下载好的安装包。2、双击软件进行安装,并...

VMware虚拟机12.1下载:修复Win10镜像识别错误等问题

IT之家讯12月9日消息,虚拟机软件VMwareWorkstation迎来12.1更新版本,本次更新为维护性更新,修复了之前版本中存在的一些问题,比如将Win10首个重大更新ISO镜像错误识别为W...

VMware vCenter Server 8.0U3b 发布下载,新增功能概览

VMwarevCenterServer8.0U3b发布下载,新增功能概览ServerManagementSoftware|vCenter请访问原文链接:https://sysin.or...

下载VMware虚拟机:打造全能多系统桌面,让IT技术探索触手可及!

VMware虚拟机打造全能多系统桌面,助力IT技术探索在当今科技飞速发展的时代,IT技术正以前所未有的速度渗透到生活和工作的方方面面。无论是智能硬件、移动应用还是云计算服务,都离不开IT技术的支撑。掌...

如何在vmware workstation player虚拟机上安装VMware Tools工具

版本:vmwareworkstation16player&ubuntu64位。首先我们使用vmwareworkstation16player启动ubuntu64位虚拟机,然后点击虚...

VMware与CentOS安装配置指南

以下是一份详细的VMware虚拟机安装、配置及CentOS系统安装配置的指南,适合新手逐步操作:一、VMware虚拟机安装与配置下载并安装VMware下载地址:访问VMware官网,选...

VMware虚拟机与物理机文件交互,这8种方法送给你

上一期我们讲解过用VMWare虚拟机打造一个金刚不坏之身的操作系统,小伙伴们反应说方法不错,只是虚拟机与物理机文件交互方式不好操作,这期应小伙伴们的要求,给大家讲解下虚拟机与物理机文件交互的8种方式,...

VMware 17.0 Pro 版本正式发布,还有适配MacOS 的 Fusion 13 Pro下载

VMware17.0Pro官方下载地址:【点击获取】私聊VMware17.0Pro的新功能特性容器和Kubernetes支持使用vctlCLI构建/运行/拉/推容器映像。支持在Works...

VMware Tools安装失败?手把手教你本地安装

VMwareTools安装失败?作为虚拟机与物理机之间的"桥梁",VMwareTools能实现文件拖拽、剪贴板共享、分辨率自适应等关键功能。没有它,VMware虚拟机就变得非常不好...