python - 如何使用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。
解决方案
webbrowser 模块的文档没有提供有关如何访问底层标头的信息。看来这是不可能的。如文档中所述:
webbrowser 模块提供了一个高级界面,允许向用户显示基于 Web 的文档。
- 在浏览器上使用扩展程序/插件
您可以使用当前代码并在浏览器上安装扩展程序,例如用于 Firefox 或 Chrome的 simple-modify-headers扩展程序。(对于 Firefox,可以通过此链接安装扩展程序,对于 Chrome,可以通过此链接安装)。
使用这些扩展更改标头值非常容易。对于简单修改标题:
还有很多其他的扩展/插件,但我不能在这里全部命名。只需搜索“修改标题扩展插件 [您的浏览器]”即可找到适合您需求的插件。
- 使用另一个库
您可以使用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针对其他浏览器的文档。
推荐阅读
- javascript - 使用 DOM 在 flexbox 列内动态地使 div 垂直居中
- java - 休眠映射问题(使用 xml 更改注释)
- python - 无法提高模型精度
- c++ - 我在 C++ 中使用很多结构是正常的吗?
- python - 如何使用 google colab 在 jupyter notebook 中显示 GIF?
- python - statsmodel GLM fit_constrained - 'int' 类型的对象没有 len()
- bash - 本地机器覆盖的 Docker 映像环境变量
- vue.js - 将整个对象传递给子组件是个好主意吗?
- azure-ad-b2c - 发行两个令牌的注册政策
- mysql - 如何计算具有 group by 子句的行?