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

Maz*_*Maz 40 python selenium selenium-chromedriver selenium-webdriver google-chrome-headless

我正在研究一个用于网络搜索的python脚本,并且已经走上了使用Chromedriver作为其中一个软件包的道路.我希望这在没有任何弹出窗口的情况下在后台运行.我在chromedriver上使用'headless'选项,它似乎没有显示浏览器窗口,但是,我仍然看到.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"
Run Code Online (Sandbox Code Playgroud)

我试图做的事情是将选项中的窗口大小改为0x0,但我不确定是什么,因为.exe文件仍然弹出.

有关如何做到这一点的任何想法?

我使用的是Python 2.7 FYI

Dan*_*ous 74

它应该如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

这适用于我使用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, chrome_options=options)
Run Code Online (Sandbox Code Playgroud)

  • 替换时最新的更新有效:options = Options()with options = webdriver.ChromeOptions() (4认同)

Deb*_*anB 48

无头模式下使用Selenium Client 3.11.x,ChromeDriver v2.38Google Chrome v65.0.3325.181时,您必须考虑以下几点:

  • 您需要添加参数--headless以无头模式调用Chrome.
  • 对于Windows OS系统,您需要添加参数--disable-gpu
  • 按照Headless: --disable-gpuLinux系统MacOS不需要make --disable-gpu flag不需要的标志.
  • 根据SwiftShader失败,Windows无头模式 --disable-gpu标志上的断言也将在Windows系统上变得不必要.
  • start-maximized最大化的视口需要参数.
    • 以下是有关Viewport详细信息的链接.
  • 您可能需要添加参数--no-sandbox以绕过操作系统安全模型.

  • Windows代码块示例:

    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")
    
    Run Code Online (Sandbox Code Playgroud)
  • 示例Linux代码块:

    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")
    
    Run Code Online (Sandbox Code Playgroud)

更新(2018年4月23日)

通过以下方法的可用性,以编程方式在无头模式下调用Google Chrome浏览器变得更加容易:set_headless(headless=True)

  • 文件:

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

    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()
    
    Run Code Online (Sandbox Code Playgroud)

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


更新(2018年10月13日)

要在无头模式下调用Chrome浏览器,您现在可以--headless通过Options()类设置属性,如下所示:

  • 示例代码:

    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()
    
    Run Code Online (Sandbox Code Playgroud)

  • 这里还需要进行一项编辑,使用 `chrome_options=options` 而不是 `options=options` (2认同)
  • 另一种:使用 `options.add_argument("--headless")` 而不是 `options.headless = True` (2认同)

Edu*_*tos 21

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

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

self.driver = webdriver.Chrome(
            executable_path=DRIVER_PATH, chrome_options=chrome_options)
Run Code Online (Sandbox Code Playgroud)


Zub*_*yer 11

更新 在我的情况下工作正常:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)
Run Code Online (Sandbox Code Playgroud)

2020 年刚刚更改。对我来说很好用。


Maz*_*Maz 8

所以在更正我的代码后:

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"
Run Code Online (Sandbox Code Playgroud)

运行脚本时 .exe 文件仍然出现。尽管这确实消除了一些告诉我“无法启动 GPU 进程”的额外输出。

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

所以基本上,

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

    c:\python27\python.exe c:\SampleFolder\ThisIsMyScript.py %*

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

  4. 双击它运行文件

所以这只是在命令提示符中打开了脚本,ChromeDriver 似乎在这个窗口中运行,而没有弹出到我的屏幕前面,从而解决了问题。


Aur*_*anu 6

  1. .exe 无论如何都会运行。根据谷歌 - “以无头模式运行,即没有 UI 或显示服务器依赖项。”

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

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


归档时间:

查看次数:

60965 次

最近记录:

6 年,2 月 前