首页电脑使用selenium获取cookie selenium获取console内容

selenium获取cookie selenium获取console内容

圆圆2025-11-07 12:02:49次浏览条评论

使用selenium wire捕获和分析selenium自动化中的网络请求

当使用Selenium进行Web自动化时,直接捕获前端与前置之间的API如何利用`seleniu m-wire`库,它作为Selenium的扩展,能够轻松拦截、检查和分析浏览器发出的所有网络流量,包括API请求和JSON响应,从而弥补了标准Selenium在此Selenium与网络请求捕获的挑战

Selenium作为我们测试工具的一个强大的Web自动化,主要描述:导航等。然而,在下面的某些高级场景中,不仅仅需要Java脚本发起异步API请求返回其JSON数据。

标准Sele nium通过WebDriver的开发者工具协议(CDP)尝试通过dri

面对“点击页面元素后,获取其触发的耳机API请求及其JSON响应“Selenium”Wire

selenium-wire是selenium的一个强大扩展,它通过WebDriver实现

相比于直接使用CDP命令或解析性能日志,selenium-wire的优势在于:简洁性:提供解析的API来访问请求和响应对象。全面性:捕获所有类型的网络流量,包括XHR、Fetch、图片、CSS、JS等。易用性:消耗复杂的浏览器内部知识,上手。安装与配置

首先,你需要通过pip安装selenium-wire库:pip selenium-wire seleniumwire import webdriverimport jsonimport time#配置WebDriver选项,例如无头模式options = webdriver.ChromeOptions()options.add_argument('--headless') # Add_argument('--disable-gpu') #取消GPU加速,有时在无头模式下需要#初始化Selenium Wire WebDriver #默认情况下,Selenium Wire会为每个请求和响应存储完整的body。#如果内存成为问题,可以配置为不存储body,或只存储特定请求的body。

# driver = webdriver.Chrome(options=options, seleniumwire_options={'disable_capture': True})driver = webdriver.Chrome(options=options)登录后复制捕获与分析网络请求

selenium-wire初始化后,所有通过该W ebDriver实例发送的网络请求都会被自动捕获并存储在driver.requ ests列表中。每个元素都是一个Request对象,包含了请求和响应详细的信息。千面视频动捕

千面视频动捕是一个AI视频动捕解决方案,专注于将视频中的人体关节二维信息转化为三维模型动作。27查看详情实战示例:点击元素并获取API响应

假设我们有一个网页,其中包含一个按钮,点击该按钮会触发一个API请求并返回JSON数据。我们的目标是点击按钮,然后获取这个API请求并解析其JSON响应。

from seleniumwire import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import Expected_conditions as ECimport jsonimport time# 1.初始化Selenium Wire WebDriveroptions = webdriver.ChromeOptions()# options.add_argument('--headless') #根据需要启用无头模式options.add_argument('--disable-gpu')driver = webdriver.Chrome(options=options)try: # 2. 导航到目标网页# # wait =WebDriverWait(driver, 10) data_button = wait.until(EC.element_to_be_clickable((By.ID, quot;dataButtonquo​​t;))) #3. driver.delete_all_requests() print(quot;已清空所有历史请求。

quot;) #4.等待时间,让API请求完成并被捕获 #Sleep(5) # #6. 遍历捕获到的请求,定位目标API target_api_url_part = '/api/get_data' # 目标API的URL片段found_api_response = None for request in driver.requests: if request.url.endswith(target_api_url_part) and request.response: print(fquot;捕获到目标API请求: {request.url}quot;) print(fquot;请求方法: {request.method}quot;) print(fquot;响应状态码: {request.response.status_code}quot;) # JSON响应体 try: # request.response.body 是字节流,需要解码 response_body = request.response.body.decode('utf-8') json_data = json.loads(response_body)found_api_response = json_data print(quot;API响应数据:quot;)打印(json.dumps(json_data) 缩进=2, Ensure_ascii=False)) break # 找到目标后即可退出循环 except json. print(fquot;原始响应体: {response_body[:200]}...quot;) # 打印部分原始响应体 except Exception as e: print(fquot;处理响应时发生错误: {e}quot;) if not find_api_response: print(fquot;未找到包含 '{target_api_url_part}' 的 API 请求相关响应。

quot;)#7. iffound_api_response: print(quot;\n获取成功并解析API数据,可以进行进一步处理。quot;) # 例如:assertfound_api_response['status'] == 'success' # 或者导出特定字段:data_items =found_api_response.get('items', []) except Exception as e: print(fquot;发生错误: {e}quot;)finally: #8. 关闭浏览器 driver.quit() print(quot;浏览器已关闭。quot;)登录复制后

代码解析:初始化:使用seleniumwire.webdriver.Chrome()初始化WebDriver。导航与交互:导航到目标URL: 在执行关键操作前调用driver.delete_all_requests()是一个好习惯,它可以在之前清除捕获的所有请求,确保我们只关心操作后面产生的请求,避免: driver.requests是一个列表,包含了所有被捕获的请求对象。我们可以遍历这个列表,通过request.url。 est.method、request.response.status_code等属性来筛选出我们感兴趣的API请求。获取响应体:request.response.body包含了响应的原始字节数据。对于JSON响应,我们需要先使用。 decode('utf-8')将其解码为字符串,然后使用高效json.loads()解析为Python字典。高级过滤

selenium-wire还提供了更灵活的过滤机制。你可以通过driver.w ait_for_request()方法等待特定的请求,这比简单的time.sleep()更准确。

# 等待一个URL包含特定字符串的请求 request = driver.wait_for_request('/api/get_data',timeout=10)if request.response: print(fquot;捕获到请求: {request.url}quot;) print(fquot;响应体: {request.response.body.decode('utf-8')}quot;)登录复制

你也可以在初始化时使用更复杂的条件:for request in driver.requests: if request.url.startswith('https://api.example.com/') and \ request.method == 'POST' and \ request.response.status_code == 200: # 处理符合条件的请求通过登录后复制清空请求记录

为了避免内图:或者在不同的测试步骤之间隔离请求: River.delete_all_requests()来清空所有已捕获的请求记录。注意事项与最佳实践内存管理: selenium-wire量,这可能导致内存占用过高。你可以通过seleniumwire_options来配置: driver = webdriver.Chrome( options=options, seleniumwire_options={'enable_compression': True, 'exclude_hosts': ['cdn.example.com']})#或者在捕获及时后处理并清空driver.delete_all_requests( )登录后复制

将来下载最新的API 版本: 。使用WebDriverWait结合EC.presence_of_element _ located 等待页面元素变化,或者使用driver.wait_for_re quest()等待特定请求,比简单的time.sleep()更加可靠。错误处理:在解析JSON响应时,务必使用try- except json.JSONDecodeError来处理非JSON格式的响应,提高代码的健壮性。HTTPS证书: 在某些环境中,如果网站使用自签名证书,selenium-wire可能会遇到SSL证书错误。通常可以通过配置WebDriver选项来忽略SSL错误:options.add_argument('--ignore-certificate-errors')登录后复制代理冲突: selenium-wire通过设置内部代理工作。如果你的WebDriver配置了外部代理,可能会发生冲突。通常建议让selenium-wire自行管理代理。总结

selenium-wire极大地扩展了Selen day的功能,设置的所有网络通信。

selenium-wire都提供了描述:SeleniumSeleniumSelenium法,你可以有效地在Selenium自动化过程中捕获并利用API请求及其JSON响应,从而Selenium WireRay相关标签: css javascript python java js 前端 json 浏览器 字节工具 ssl 头部 ai Python JavaScript json css chrome pip try 字符串接口 JS 对象事件异步 数据分析 http https ssl 自动化 大家都在看: Flask WTForms条件样式:使用Jinja2优化CSS类动态应用 Scrapy CSS选择器:精确获取HTML非标签覆盖文本内容的实用技巧BeautifulSoup精确预测:理解标签迭代与CSS选择器应用Scrapy CSS BeautifulSoup进阶:深入理解标签迭代与CSS选择器实践

使用Selenium
猫眼电影app怎么给看过的电影打标签_猫眼电影已看电影标签添加方法
相关内容
发表评论

游客 回复需填写必要信息