【问题标题】:Chrome + selenium + python works for headed chrome, does not work for headless runChrome + selenium + python 适用于 headed chrome,不适用于 headless run
【发布时间】:2023-01-14 03:08:47
【问题描述】:

以下代码与有头 chrome 完美配合,但在无头 chrome 的最后一行因超时而失败

import time                                                                               
import chromedriver_autoinstaller                                                         
from selenium import webdriver                                                            
from selenium.webdriver.common.by import By                                               
from selenium.webdriver.support.ui import WebDriverWait                                   
from selenium.webdriver.support import expected_conditions as EC                          
from selenium.webdriver.chrome.options import Options                                     
chromedriver_autoinstaller.install()                                                      
                                                                                          
chrome_options = Options()                                                                
chrome_options.add_argument("--headless")                                                 
                                                                                          
driver = webdriver.Chrome(options=chrome_options)                                         
                                                                                          
driver.get("http://redacted")                                          
                                                                                          
elem = WebDriverWait(driver, 60).until(                                                   
    EC.presence_of_element_located(                                                       
        (By.XPATH, "//div[contains(@class, 'new-book-rect')]")                            
    ))                                                                  

我检查了类似的问题,但似乎不适用。一个表示您需要使用 xpath 而不是 id 来查找元素,但我已经在这样做了。

失败的原因是什么,有没有办法调查无头运行时发生了什么?

使用最新版本的 Chrome,并自动下载驱动程序。

【问题讨论】:

  • 它似乎正在检测无头模式下的机器人。你可以用这个print(driver.page_source) 放心,并检查 html 是否有所需的元素?
  • @KunduK 很好发现,但实际上正在做的是有一个单一的登录,并且无头它不会自己通过 SSO 重定向舞蹈(它有头)。目前还不清楚为什么它会采取不同的行动。
  • @KunduK 请注意,我尝试使用 --enable-features=NetworkService,但它不起作用。同样的结果。
  • 你能试试这个选项吗:--disable-blink-features=AutomationControlled
  • @KunduK 同样的问题。

标签: python selenium google-chrome


【解决方案1】:

Chromium 开发人员最近添加了一个第二名无头模式,其功能与普通 Chrome 相同。 (https://bugs.chromium.org/p/chromium/issues/detail?id=706008#c36)

--headless=chrome

在您的脚本中,将 --headless 替换为 --headless=chrome 以获得改进的无头模式,其功能与常规 Chrome 相同:

chrome_options.add_argument("--headless=chrome")

然后您的代码将像在常规 Chrome 中一样“完美”地工作。


2023 年 1 月更新:

从 Chrome 109 开始,Chromium 团队将该选项重命名为--headless=new。有关详细信息,请参阅https://github.com/chromium/chromium/commit/e9c516118e2e1923757ecb13e6d9fff36775d1f4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 2017-06-19
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2018-09-14
    相关资源
    最近更新 更多