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



我运行了这段代码来在Selenium Python中设置User Agent Client Hint sec-chua,但它仍然没有改变。

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/")

Chromium的绿色战略

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

举几个例子:

  • 为了避免网站将未知浏览器从其允许列表中禁止,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"
    

然而,希腊有以下几种:

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

此用例

根据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

  • 〔客户端提示〕GREASE Sec CH UA列表
  • Issue 1070922:userAgentMetadata uaList应为GREASEd

最新更新