首页 > 编程问答 >Selenium 是否可以检测发送到 devtools 网络选项卡中站点的特定请求?

Selenium 是否可以检测发送到 devtools 网络选项卡中站点的特定请求?

时间:2024-07-24 05:39:12浏览次数:7  
标签:python selenium-webdriver webdriver

我在 Chrome 和 Firefox 上使用 python 上的 Selenium。我希望 selenium 等待,直到将特定请求发送到可以位于 devtools 的网络选项卡中的站点。例如名称为“index-24c3e2ca18.js”且请求 URL 为“https://www.wikipedia.org/portal/wikipedia.org/assets/js/index-24c3e2ca18.js”的请求

这可以吗用硒完成吗?如果不能,可以采取什么措施来实现这一目标?


是的,可以使用 Selenium 检测发送到 Chrome 和 Firefox 中站点的特定请求。但是,不能直接使用 Selenium 的“网络”选项卡。Selenium 主要与网页的 DOM 交互,并不直接提供用于监视网络请求的功能。

要实现的目标,需要将 Selenium 与浏览器驱动程序的功能(如 Chrome 的“性能日志”和 Firefox 的“HAR 日志”)结合起来。

以下是如何使用 Python 中的 Selenium 实现此目标的方法:

1. 启用性能日志记录

Chrome:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--performance-logging-preferences={"traceCategories": "devtools.network"}')
driver = webdriver.Chrome(options=options)

Firefox:

from selenium import webdriver

options = webdriver.FirefoxOptions()
options.set_preference("devtools.netmonitor.har.enable", True)
options.set_preference("devtools.netmonitor.har.pageRef", "page")
driver = webdriver.Firefox(options=options)

2. 导航到页面并捕获日志

driver.get("https://www.wikipedia.org")

# 获取日志
logs = driver.get_log("performance") # Chrome
logs = driver.execute_script("return window.performance.getEntries();") # Firefox

3. 解析日志以查找特定请求

for entry in logs:
    # Chrome
    if 'message' in entry and 'method' in entry['message']:
        message = entry['message']
        message_json = json.loads(message)
        if message_json['message']['method'] == 'Network.requestWillBeSent':
            request = message_json['message']['params']['request']
            if request['url'] == "https://www.wikipedia.org/portal/wikipedia.org/assets/js/index-24c3e2ca18.js":
                print("找到请求!")

    # Firefox
    if entry['name'] == 'http' and entry['request']['url'] == "https://www.wikipedia.org/portal/wikipedia.org/assets/js/index-24c3e2ca18.js":
        print("找到请求!")

这段代码会分析性能日志,并检查是否存在与提供的 URL 匹配的请求。

替代方法 - 使用 Browsermob-Proxy

另一种方法是使用 Browsermob-Proxy。它是一个代理服务器,允许拦截和检查浏览器与 Web 服务器之间的所有请求和响应。可以使用 Python 库(如“browsermob-proxy-py”)与 Browsermob-Proxy 进行交互。

这些方法使能够使用 Selenium 检测发送到网页的特定请求,即使它不是直接在 DOM 中可见。请记住,网络请求的结构可能会因网站而异,因此可能需要调整用于查找特定请求的条件。

标签:python,selenium-webdriver,webdriver
From: 78785642

相关文章

  • 如何在 Python 中查看与 Azure OpenAI 助手关联的所有上传文件?
    我正在使用Python对文档中的问题进行基准测试,并在jupyter笔记本中实例化了我的助手。我想确认助手是否有我上传的文件,但似乎找不到有关此功能将使用什么功能的文档。使用适用于AzureOpenAI的最新版本的PythonAPI。目前,无法使用AzureOpenAI的PythonAPI直接查看......
  • 如何在Python中计算小数?
    我正在创建一个计算器来用python计算企业的利润,但到目前为止我只能使用整数。这是我的代码示例:Gross=int(input("PleaseentertotalGrossRevenuefortheFiscalYear"))NetTaxes=int(Gross)*0.1所以我将会计年度的总收入乘以按“税率”计算,但我只能使用......
  • 如何使用 Python 打开 Google Firestore 上的特定数据库?
    我正在使用Firebase并使用以下代码从Firestore设置/检索文档:importfirebase_adminfromfirebase_adminimportcredentials,firestorecred=credentials.ApplicationDefault()firebase_admin.initialize_app(cred,options={"projectId":"huq-jimbo"})fires......
  • WebDriverException:消息:服务 chromedriver 意外退出。状态代码为:127
    我想在我的服务器上使用selenium构建我的爬虫。因此我在我的Ubuntu17.10服务器上安装/下载了所需的依赖项-例如chromedriver、chromium-browser等但是,当我运行以下代码时:driver=webdriver.Chrome()它返回以下错误:-----------------------------------......
  • 如何使用 Python 和 Numpy 重现 Matlab 文件读取以解码 .dat 文件?
    我有一个Matlab脚本,可以读取编码的.dat文件,对其进行解码并保存。我试图使用numpy将其转换为Python。我发现对于同一个文件,我得到不同的输出结果(python数字没有意义)。该代码最初作为从串行端口读取的脚本的一部分运行,因此是数据的结构。我首先认为位移是问题所在,因为......
  • 在Python中调整pdf页面大小
    我正在使用python裁剪pdf页面。一切正常,但如何更改页面大小(宽度)?这是我的裁剪代码:input=PdfFileReader(file('my.pdf','rb'))p=input.getPage(1)(w,h)=p.mediaBox.upperRightp.mediaBox.upperRight=(w/4,h)output.addPage(p)当我裁剪页面时,我也需要......
  • 如何使用 python 更改资源管理器窗口中的路径?
    没有人知道如何在不使用python打开新实例的情况下更改资源管理器窗口中的当前路径吗?例如,如果用户使用C:\Users\User打开资源管理器窗口。然后我必须将该路径更改为C:\Windows\System32例如。提前致谢。很遗憾,无法直接使用Python更改现有文件资源管理器窗口的......
  • python 以及将数组传递给函数的问题
    我需要求解一些常微分方程$\frac{dy}{dx}=f(x)=x^2ln(x)$并继续在限制0之间创建数组xpt。<=xpt<=2因为我必须小心xpt=0,所以我将函数定义如下deff(x):ifx<=1.e-6:return0.else:returnnp.square(x)*np.log(x)我的调用程序读取Np......
  • 如果 Python 脚本正在使用文件夹,如何在文件资源管理器中进行更改时防止 Windows 的“
    我有一个简单的脚本,显示在QTreeView中的QListView中选择的目录的内容,我想添加打开文件资源管理器的功能,以让用户编辑目录内的内容。但是,添加新的文件夹和文件可以,但删除或移动文件夹或文件会提示“文件夹正在使用”错误:此操作无法完成,因为该文件已在另一个程......
  • 如何使用 Python API 获取每个模型的活跃用户列表、最后登录信息
    我想通过PythonAPI获取我的dbt项目的所有模型中的活动或非活动用户列表。这可能吗?我尝试列出模型,但无法获取用户信息,如用户名、项目、以及上次活动或上次登录。不幸的是,dbt本身并不跟踪你所寻找的用户活动数据(最后登录、活跃用户等)。dbt的主要功能是转换数据,而不......