browsermobproxy + selenium 获取接口json

browsermobproxy + selenium 获取接口json数据

第三方库各版本情况:

selenium==4.12.0 browsermob-proxy==0.8.0

browsermob-proxy-2.1.4-bin.zip(外部程序)

1.导入第三方库

coding=utf-8

import time

from selenium.webdriver.common.by import By

from selenium import webdriver

from selenium.webdriver.firefox.options import Options

import json

from browsermobproxy import Server

2.运行proxy服务器

server = Server('browsermob-proxy-2.1.4\\bin\\browsermob-proxy.bat')

server.start()

proxy = server.create_proxy(params={'trustAllServers':'true'}) #信任所有证书,针对自签名证书

创建一个Selenium WebDriver的代理配置

print(proxy.port)

3.设置options参数

options = Options()

options.add_argument('--headless')

#火狐设置这五行代理就OK了;

options.set_preference("network.proxy.type", 1)

options.set_preference("network.proxy.http", '127.0.0.1') #设置http代理服务器

options.set_preference("network.proxy.http_port", proxy.port) #设置http代理服务器端口

options.set_preference("network.proxy.ssl", '127.0.0.1') #设置https代理服务器

options.set_preference("network.proxy.ssl_port", proxy.port) #设置https代理服务器端口

'''

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

options.add_argument("disable-gpu")

options.add_argument("--disable-extensions")

options.add_argument('--proxy-server={0}'.format(proxy.proxy)) #这四个选项是谷歌的

创建一个Firefox配置文件

profile = webdriver.FirefoxProfile()

添加受信任的SSL证书 (这部分留个记录)

profile.accept_untrusted_certs = True

profile.assume_untrusted_cert_issuer = False

profile.set_preference("security.enterprise_roots.enabled", True)

profile.set_preference("security.certerrors.recordEventTelemetry", False)

profile.set_preference("security.certerrors.mitm.priming.enabled", False)

profile.set_preference("security.family_safety.mode", 0)

profile.set_preference("security.OCSP.enabled", 0)

profile.set_preference("security.OCSP.require", False)

profile.set_preference("security.ssl.enable_ocsp_stapling", False)

profile.set_preference("security.enterprise_roots.enabled", True)

profile.set_preference("security.enterprise_roots.enabled", True)

profile.add_extension(extension=certificate_file_path)

options.set_capability("moz:firefoxOptions", {"profile": profile})

options.add_argument('--trust-all-certs')

options.add_argument(f'--profile={certificate_file_path}')

'''

4.设置过滤器、创建火狐浏览器实例

#设置代理过滤器

proxy.new_har("test",options={'captureHeaders': True, 'captureContent': True})

#services=webdriver.FirefoxService('geckodriver.exe')

driver = webdriver.Firefox(options=options)

5.访问链接获取接口数据(json格式)

#设置url

url='https://xxxx.xx'

driver.get(url)

time.sleep(3)

proxy.wait_for_traffic_to_stop(1, 60)

result = proxy.har

for entry in result'log''entries':

_url = entry'request''url'

根据URL找到数据接口

respose_rul='https://xxxx.xx' #api接口链接特征

if respose_rul in _url:

print(_url)

_response = entry'response'

_content = _response'content''text'

返回的均是字符串包着字典,为了提高可读性,先将数据转换成python字典,再转成json数据

content_dict = json.loads(_content)

print(content_dict)

#content_json = json.dumps(content_dict,indent=4)

#content_json=json.loads(content_json)

with open('respose.txt','w',encoding='gbk')as f:

json.dump(content_dict,f,indent=4)

#print(content_dict)

获取接口返回内容

#print(_content)

相关推荐
SelectDB11 小时前
StarRocks 适合做日志分析吗?
数据分析·json·自动化运维
SelectDB11 小时前
为什么 JSON 正在成为分析数据库新的竞争点?
数据库·json·agent
weixin_440730501 天前
selenium实战记录-从登陆-首页-进入应用页面测试用例
selenium·测试工具·测试用例
测试老哥1 天前
Postman获取token并设置token依赖步骤
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
江畔柳前堤1 天前
字节跳动产品全景图:从应用表象到技术深海的七层解剖
人工智能·chatgpt·架构·json·batch
我的xiaodoujiao1 天前
Django 基础知识详细图文教程 4-Django 视图定义与使用
开发语言·数据库·后端·测试工具·django·sqlite
JZMSYYQ2 天前
电输运性质测试系统主要测试哪些方面
测试工具·材料测试·电性能·电性能测试·电输运测试·测试设备
中国软件测试质量协会2 天前
国产UI自动化测试工具的“技术代际“演进与自主可控之路
测试工具·ui·自动化
zzzzzzzz'3 天前
浅谈自动化测试2——selenium库中的常用函数
selenium·测试工具·文件上传·导航栏·弹窗·定位元素·查找元素
蒲公英内测分发3 天前
AI 玩具 App 每周更新,怎么用 CI/CD 自动上传测试包又避免误发?
人工智能·测试工具·智能硬件·web app