如何使用 python 在浏览器中使用自定义 headers 打开 url

How to open url in browser with custom headers using python

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

'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 脚本在我的默认浏览器中使用自定义 headers.

打开一个 url

webbrowser 模块的 documentation 不提供有关如何访问底层 header 的信息。这似乎是不可能的。如文档中所述:

The webbrowser module provides a high-level interface to allow displaying Web-based documents to users.

  1. 在浏览器上使用 extension/addon

您可以使用当前代码并在浏览器上安装扩展程序,例如 simple-modify-headers extension for Firefox or Chrome. (The extension can be installed via this link for Firefox and via this link for Chrome)。

使用这些扩展程序更改 header 值非常容易。对于 simple-modify-headers:

还有很多其他 extensions/addons,但我不能在这里一一列举。只需搜索“修改 Header 扩展插件 [您的浏览器]”即可找到适合您需要的插件。

  1. 使用另一个库

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

Selenium Wire extends Selenium's Python bindings to give you access to the underlying requests made by the browser. You author your code in the same way as you do with Selenium, but you get extra APIs for inspecting requests and responses and making changes to them on the fly.

示例:

通过 pip 安装:

pip install selenium-wire

为您的浏览器下载并安装 driver:Chrome Driver or Gecko Driver

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

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

安装 OpenSSL:

# For apt based Linux systems
sudo apt install openssl

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

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')

我从 this answer 推导出上面的代码。

其他浏览器可以看Selenium's documentation,需要的话