如何在Selenium Python3中等待并捕获含/b/ss/的网络请求?
解决Selenium捕获指定请求头网络调用的问题
你用的wait_for_request不是原生Selenium的方法,这个功能依赖Selenium Wire(扩展Selenium的第三方库,专门用于拦截、查看网络请求),而且你的代码只匹配了请求路径为/b/ss/的请求,和你要捕获「请求头包含b/ss」的需求不匹配,这是没达到预期的核心原因。
修复步骤
1. 安装Selenium Wire
先确保安装该库:
pip install selenium-wire
2. 修改代码逻辑
用Selenium Wire的Driver替换原生Selenium Driver,通过回调或遍历的方式筛选请求头包含b/ss的请求。
方式一:等待并捕获第一个符合条件的请求
from seleniumwire import webdriver from validator.Validation import valid_url # 注意你代码里的`validatior`是拼写错误,需修正 url = valid_url(input("Please enter the website url : ")) # 初始化Selenium Wire的Chrome Driver,其他浏览器同理 driver = webdriver.Chrome() driver.get(url) # 定义判断规则:检查请求头的键或值是否包含"b/ss" def match_request(request): for key, value in request.headers.items(): if "b/ss" in str(value) or "b/ss" in key: return True return False # 等待30秒,直到找到符合条件的请求 target_request = driver.wait_for_request(match_request, timeout=30) print("捕获到的目标请求:", target_request.url)
方式二:捕获所有符合条件的请求
如果需要获取页面加载过程中所有匹配的请求,可在加载完成后遍历筛选:
from seleniumwire import webdriver from validator.Validation import valid_url url = valid_url(input("Please enter the website url : ")) driver = webdriver.Chrome() driver.get(url) # 遍历所有请求,筛选符合条件的条目 matched_requests = [] for request in driver.requests: for key, value in request.headers.items(): if "b/ss" in str(value) or "b/ss" in key: matched_requests.append(request) break # 避免同一请求重复加入 print(f"共捕获到{len(matched_requests)}个符合条件的请求") for req in matched_requests: print(req.url)
注意事项
- 修正代码里
validatior的拼写错误为validator,否则会触发导入异常。 - 若目标请求是页面加载完成后异步发起的,可结合Selenium的
WebDriverWait等待关键元素加载完成后再筛选请求。
内容的提问来源于stack exchange,提问作者kishan sahu
相关产品推荐
相关产品推荐

