首页 > 解决方案 > 如何使用python在浏览器中打开带有自定义标题的url

问题描述

我尝试使用 webbrowser 模块,代码如下,但想设置自定义标头,例如:

'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1'

这是我现在拥有的代码:

import webbrowser
webbrowser.open("https://www.bing.com/search?q=TEST123")

我也可以使用另一个库。本质上,我希望我的 python 脚本在我的默认浏览器中打开一个带有自定义标题的 url。

标签: pythonpython-webbrowser

解决方案


webbrowser 模块的文档没有提供有关如何访问底层标头的信息。看来这是不可能的。如文档中所述:

webbrowser 模块提供了一个高级界面,允许向用户显示基于 Web 的文档。

  1. 在浏览器上使用扩展程序/插件

您可以使用当前代码并在浏览器上安装扩展程序,例如用于 Firefox 或 Chrome的 simple-modify-headers扩展程序。(对于 Firefox,可以通过链接安装扩展程序,对于 Chrome,可以通过此链接安装)。

使用这些扩展更改标头值非常容易。对于简单修改标题:

简单修改标题设置

还有很多其他的扩展/插件,但我不能在这里全部命名。只需搜索“修改标题扩展插件 [您的浏览器]”即可找到适合您需求的插件。

  1. 使用另一个库

您可以使用Selenium Wire。这个库可能正是你想要的:

Selenium Wire 扩展了 Selenium 的 Python 绑定,让您可以访问浏览器发出的底层请求。您编写代码的方式与编写 Selenium 的方式相同,但您会获得额外的 API 来检查请求和响应并动态更改它们。

例子:

通过 pip 安装:

pip install selenium-wire

为您的浏览器下载并安装驱动程序:Chrome 驱动程序Gecko 驱动程序

选择与您的浏览器兼容的版本。

要获取您的浏览器版本:在 Firefox 上转到menu > help > about; 在 Chrome 上转到menu > about chrome

安装 OpenSSL:

# For apt based Linux systems
sudo apt install openssl

有关安装的更多详细信息,请参阅文档

from seleniumwire import webdriver  # Import from seleniumwire

# Create a new instance of the Chrome driver (or Firefox)
driver = webdriver.Chrome()

# Create a request interceptor
def interceptor(request):
    del request.headers['User-Agent']  # Delete the header first
    request.headers['User-Agent'] = 'Custom User-Agent'

# Set the interceptor on the driver
driver.request_interceptor = interceptor

# All requests will now use 'some_referer' for the referer
driver.get('https://www.bing.com/search?q=TEST123')

我从这个答案中得出了上面的代码。

如果需要,您可以查看Selenium针对其他浏览器的文档。


推荐阅读