如何在 Selenium Python 中设置用户代理客户端提示 sec-ch-ua

2023-12-06

我运行此代码在 Selenium Python 中设置 User-Agent Client Hint sec-ch-ua 但它仍然没有改变。

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

sec_ch_ua = '" Not A;Brand";v="99", "Chromium";v="88", "Google Chrome";v="88"' # for example

options = Options()
options.add_argument(f'--sec-ch-ua={sec_ch_ua}')

driver = Chrome("chromedriver.exe", options=options)
driver.get("https://user-agent-client-hints.glitch.me/")

铬的润滑脂战略

用户代理的品牌包含多个条目可以鼓励品牌列表的标准化处理。通过随机包含额外的、故意不正确的、以逗号分隔的任意顺序的条目,它们将减少我们僵化在一些必需字符串上的机会。

举几个例子:

  • 为了避免网站将未知浏览器排除在允许列表之外,Chrome 可以发送一个 UA 集,其中包含不存在的浏览器,并且该浏览器偶尔会发生变化。

    "Chrome"; v="73", "(Not;Browser"; v="12"
    
  • 为了启用基于 Chromium 版本的等价类,Chrome 可以向其中添加渲染引擎及其版本。

    "Chrome"; v="73", "(Not;Browser"; v="12", "Chromium"; v="73"
    
  • 为了鼓励网站依赖基于 Chromium 版本的等价类而不是精确的 UA 嗅探,Chrome 可能会将自己从集合中完全删除。

    "(Not;Browser"; v="12", Chromium"; v="73"
    
  • 基于 Chromium 的浏览器可能会使用类似的 UA 字符串,但使用自己的品牌作为集合的一部分,从而使网站能够对它们进行计数。

    "Chrome"; v="73", "Xwebs mega"; v="60", "Chromium"; v="73", "(Not;Browser"; v="12"
    

然而,润滑脂有一些限制,如下:

  • 用户代理必须在品牌中包含多个单一值,其中其中一个值是任意值。
  • 品牌中的值顺序必须随着时间的推移而改变,以防止标头的接收者依赖于列表中某些位置的某些值。
  • 在选择 GREASE 策略时,用户代理应该牢记缓存差异和分析用例,并最大限度地减少相同用户代理版本之间的差异。
  • 最小化缓存和分析差异的一种方法是在构建时确定 UA 集的 GREASE 部分,并在用户代理重要版本的整个生命周期中保持它们相同。

这个用例

根据中的列表Chromium 命令行开关列表我没有找到列出的特定选项,并且仍然可能无法针对您的测试进行调整。

不过,您可以尝试其他一些值,如下所示:

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

sec_ch_ua = '"Examplary Browser"; v="73", ";Not?A.Brand"; v="27"' # for example

options = Options()
options.add_argument(f'--sec-ch-ua={sec_ch_ua}')

driver = Chrome("chromedriver.exe", options=options)
driver.get("https://user-agent-client-hints.glitch.me/")

tl; dr

  • [客户端提示] 润滑 Sec-CH-UA 列表
  • 问题 1070922:userAgentMetadata uaList 应进行 GREASE 处理
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Selenium Python 中设置用户代理客户端提示 sec-ch-ua 的相关文章

随机推荐