如何配置 ChromeDriver 通过 Selenium 在 Headless 模式下启动 Chrome 浏览器?

我正在编写一个 Python 脚本来进行 web 擦除,并且已经开始使用 ChromeDriver 作为其中的一个软件包。我希望这个操作在后台没有任何弹出窗口。我使用的选项’无头’的铬驱动程序,它似乎做的工作方面没有显示浏览器窗口,但是,我仍然看到。运行 exe 文件。看看我所说的截图。截图

这是我用来启动 ChromeDriver 的代码:

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument('headless')
options.add_argument('window-size=0x0')
chrome_driver_path = "C:\Python27\Scripts\chromedriver.exe"

我尝试做的事情是将窗口大小的选项改为0x0,但是我不确定它是否像。Exe 文件仍然弹出。

你知道我该怎么做吗?

仅供参考,我正在使用 Python 2.7

244068 次浏览
  1. 那个。不管怎样前任都会参选的。根据 Google-“在 headless 模式下运行,也就是说,没有 UI 或显示服务器依赖项。”

  2. 最好在命令行参数前面加2个破折号,即 options.add_argument('--headless')

  3. 在无头模式下,还建议禁用 GPU,即 options.add_argument('--disable-gpu')

它应该是这样的:

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


options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')  # Last I checked this was necessary.
driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)

这对于我使用 Python 3.6来说是可行的,我确信它在2.7中也可以。

更新2018-10-26 : 这些天你可以这样做:

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


options = Options()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)

因此,在将我的代码更正为:

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument('--disable-gpu')
options.add_argument('--headless')
chrome_driver_path = "C:\Python27\Scripts\chromedriver.exe"

那个。运行脚本时,exe 文件仍然出现。虽然这确实摆脱了一些额外的输出告诉我“未能启动 GPU 进程”。

最后的工作是使用. bat 文件运行我的 Python 脚本

所以基本上,

  1. 如果是文件夹,则保存 python 脚本
  2. 打开文本编辑器,转储以下代码(当然是编辑到您的脚本中)

    C: python27 python.exe c: 样本文件夹 thisismyscript.py% *

  3. 保存. txt 文件并将扩展名更改为. bat

  4. 双击此按钮运行该文件

So this just opened the script in Command Prompt and ChromeDriver seems to be operating within this window without popping out to the front of my screen and thus solving the problem.

2018年10月13日的应答更新

要使用 驱动的 ChromeDriver启动 浏览上下文,现在只需通过 Options()类的实例将 --headless属性设置为 true,如下所示:

  • 有效代码块:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    
    options = Options()
    options.headless = True
    driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized")
    driver.quit()
    

2018年4月23日的应答更新

模式下以编程方式调用 已经变得非常容易,方法 强 > set_headless(headless=True)的可用性如下:

  • 文件:

    set_headless(headless=True)
    Sets the headless argument
    
    
    Args:
    headless: boolean value indicating to set the headless option
    
  • 示例代码:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    
    options = Options()
    options.set_headless(headless=True)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized")
    driver.quit()
    

注意 : --disable-gpu参数在内部实现。


Original Answer of Mar 30 '2018

在使用 Selenium 客户端3.11. xChromeDriver v2.38Google Chrome v65.0.3325.181无头模式时,你必须考虑以下几点:

  • 您需要添加参数 --headless来在 headless 模式下调用 Chrome。

  • 对于 视窗操作系统,需要添加参数 < strong > --disable-gpu

  • 根据 Headless: make —— disable-gpu 标志是不必要的 --disable-gpu标志是不需要在 Linux 系统MacOS

  • 根据 在无头模式下,SwiftShader 使 Windows 上的断言失败 --disable-gpu标志将成为不必要的对 视窗系统了。

  • Argument start-maximized is required for a maximized 视窗.

  • 这里是有关 < strong > Viewport 的详细信息的链接。

  • 您可能需要添加参数 --no-sandbox来绕过操作系统安全模型。

  • 有效的 代码块:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    
    options = Options()
    options.add_argument("--headless") # Runs Chrome in headless mode.
    options.add_argument('--no-sandbox') # Bypass OS security model
    options.add_argument('--disable-gpu')  # applicable to windows os only
    options.add_argument('start-maximized') #
    options.add_argument('disable-infobars')
    options.add_argument("--disable-extensions")
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized on Windows OS")
    
  • 有效的 代码块:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    
    options = Options()
    options.add_argument("--headless") # Runs Chrome in headless mode.
    options.add_argument('--no-sandbox') # # Bypass OS security model
    options.add_argument('start-maximized')
    options.add_argument('disable-infobars')
    options.add_argument("--disable-extensions")
    driver = webdriver.Chrome(chrome_options=options, executable_path='/path/to/chromedriver')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized on Linux OS")
    

通过 YouTube 视频的步骤

如何通过 Selenium 最大化模式初始化 Chrome 浏览器

Outro

如何在 Selenium 中使用 python 程序化地使 Firefox 无头?


博士

这里是 沙盒故事的链接。

尝试使用 ChromeDriverManager

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.set_headless()
browser =webdriver.Chrome(ChromeDriverManager().install(),chrome_options=chrome_options)
browser.get('https://google.com')
# capture the screen
browser.get_screenshot_as_file("capture.png")

from chromedriver_py import binary_path
 

 

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--window-size=1280x1696')
chrome_options.add_argument('--user-data-dir=/tmp/user-data')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('--enable-logging')
chrome_options.add_argument('--log-level=0')
chrome_options.add_argument('--v=99')
chrome_options.add_argument('--single-process')
chrome_options.add_argument('--data-path=/tmp/data-path')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--homedir=/tmp')
chrome_options.add_argument('--disk-cache-dir=/tmp/cache-dir')
chrome_options.add_argument('user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')
   

driver = webdriver.Chrome(executable_path = binary_path,options=chrome_options)


更新于2020年8月20日——现在很简单!

chrome_options = webdriver.ChromeOptions()
chrome_options.headless = True


self.driver = webdriver.Chrome(
executable_path=DRIVER_PATH, chrome_options=chrome_options)
chromeoptions=add_argument("--no-sandbox");
add_argument("--ignore-certificate-errors");
add_argument("--disable-dev-shm-usage'")

不支持浏览器

solution:

Open Browser    ${event_url}    ${BROWSER}   options=add_argument("--no-sandbox"); add_argument("--ignore-certificate-errors"); add_argument("--disable-dev-shm-usage'")

不要忘记在 ${BROWSER}选项之间添加空格

上面的解决方案不适用于带有云照耀保护的网站,例如: https://paxful.com/fr/buy-bitcoin

修改代理如下: Add _ reference (“ user-agent = Mozilla/5.0(Windows NT 6.1; Win64; x64) AppleWebKit/537.36(KHTML,like Gecko) Chrome/84.0.4147.125 Safari/537.36”)

修复: 通过 Selenium Python 在正常/无头模式下使用 ChromeDriver/Chrome 访问 Cloudflare 网站有什么区别

System.setProperty("webdriver.chrome.driver",
"D:\\Lib\\chrome_driver_latest\\chromedriver_win32\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--allow-running-insecure-content");
chromeOptions.addArguments("--window-size=1920x1080");
chromeOptions.addArguments("--disable-gpu");
chromeOptions.setHeadless(true);
ChromeDriver driver = new ChromeDriver(chromeOptions);

更新 It works fine in my case:

from selenium import webdriver


options = webdriver.ChromeOptions()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)

2020年刚换的,我觉得挺好的。

There is an option to hide the chromeDriver.exe window in alpha and beta versions of Selenium 4.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService # Similar thing for firefox also!
from subprocess import CREATE_NO_WINDOW # This flag will only be available in windows
chrome_service = ChromeService('chromedriver', creationflags=CREATE_NO_WINDOW)
driver = webdriver.Chrome(service=chrome_service) # No longer console window opened, niether will chromedriver output

You can check it out from 给你. To pip install beta or alpha versions, you can do "pip install selenium==4.0.0.a7" or "pip install selenium==4.0.0.b4" (a7 means alpha-7 and b4 means beta-4 so for other versions you want, you can modify the command.) To import a specific version of a library in python you can look 给你.

2021年8月更新:

最快的方法可能是:

from selenium import webdriver


options = webdriver.ChromeOptions()
options.set_headless = True
driver = webdriver.Chrome(options=options)

不推荐使用 options.headless = True