今天,我将 Chrome 浏览器更新到最新版本 (129)。更新后,在无头模式下运行 Chrome 会产生不寻常的结果:出现一个空白的白色窗口,与浏览器大小匹配。我在 Windows 上使用 Puppeteer 和 Selenium 与 Chrome 129。

为什么会出现这个空白窗口?这是 Chrome 129 的一个错误吗?

测试结果:

Chrome128 Chrome129 Chrome130
木偶师(v23.4.0)
硒(v4.0)
剧作家(v1.47.1)

2

  • 我们尚未支持 129。puppeteer 的上游变更可能很快就会出现。


    – 

  • 您指的是哪个版本的 Puppeteer 和 Selenium?


    – 


最佳答案
3

根据,您必须使用 Chrome 的新无头模式来避免此问题。

Chrome 的选项如下:--headless=new

在 Python 中,设置该选项如下:

options.add_argument("--headless=new")

的所有 Stack Overflow 评论,您会发现旧的无头模式将在今年退役,这可能意味着削减对它的支持,而不是为它修复新的问题,比如这个。


根据,Chromedriver 可能存在一个真正的错误,需要先修复。

以下是我针对该错误的临时修复:

  • --window-position=-2400,-2400
options.add_argument("--window-position=-2400,-2400")

(我将窗口移出屏幕很远,这样就看不见了。)

2

  • 我尝试了“–headless=new”选项。但它显示相同的错误。chrome128 和 chrome130 没有问题。只有 chrome129 有错误。


    – 


  • 暂时使用--window-position=-2400,-2400。Chromium 团队尚未修复 129 中的错误。


    – 

尝试新的无头模式标志:–headless=new

const browser = await puppeteer.launch({ headless: true, // 使用传统无头模式 args: [‘–headless=chrome’, ‘–disable-gpu’, ‘–no-sandbox’] });

可能的原因:Chrome 129 无头模式行为改变:

Chrome 的无头模式在最近的版本中发生了重大变化。自 Chrome 109 以来,有一种名为无头模式 v2 (–headless=new) 的新模式,它改变了渲染的处理方式。Chrome 129 可能强制或进一步修改了此行为。缺少或不正确的标志:

空白窗口通常表示未传递无头模式的正确标志。无头模式需要特定标志来确保浏览器正确运行而不呈现可见窗口。Puppeteer/Selenium 的渲染问题:

Puppeteer 和 Selenium 可能需要更新才能处理 Chrome 129 无头模式的变化。如果它们不是最新的或未针对最新的 Chrome 版本正确配置,渲染可能会失败,导致窗口空白。驱动程序或兼容性问题:

Selenium 和 Puppeteer 使用的 ChromeDriver 可能与 Chrome 129 不完全兼容,尤其是在无头模式行为发生变化的情况下。确保 ChromeDriver 更新到与 Chrome 129 匹配的最新版本至关重要。

1

  • 这并不是什么新鲜事 + 无论如何问题仍然存在。


    – 

作为临时解决方案,您可以将浏览器版本回滚到 128 并运行

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)

2

  • 这是答案还是在提问?如果您想解释如何禁用该功能,也许可以您的帖子并使用清晰的语言,例如“要禁用该功能,请转到 chrome://flags/#enable-lens-region-search 并禁用镜头覆盖”。


    – 

  • 一旦你澄清了帖子,@我,我会删除反对票。目前,这不是一个合适的答案。


    –