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

时间:2017-10-24 21:23:06

标签: python selenium selenium-webdriver selenium-chromedriver google-chrome-headless

我正在研究一个用于网络搜索的python脚本,并且已经走上了使用Chromedriver作为其中一个软件包的道路。我希望这在没有任何弹出窗口的情况下在后台运行。我在chromedriver上使用'headless'选项,它似乎没有显示浏览器窗口,但是,我仍然看到.exe文件正在运行。看到我正在谈论的截图。 Screenshot

这是我用来启动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 FYI

11 个答案:

答案 0 :(得分:55)

它应该是这样的:

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, chrome_options=options)

答案 1 :(得分:33)

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

  • 您需要添加参数 --headless 以无头模式调用Chrome。
  • 对于 Windows操作系统,您需要添加参数 --disable-gpu
  • 根据{em> Linux系统和 MacOS 不需要Headless: make --disable-gpu flag unnecessary --disable-gpu标记。
  • 根据SwiftShader fails an assert on Windows in headless mode --disable-gpu标记, Windows系统上也不再需要。
  • 最大化的视口需要参数 start-maximized
    • 以下是有关Viewport
    • 的详细信息的链接
  • 您可能需要添加参数 --no-sandbox 以绕过操作系统安全模型。

    • 以下是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")
    
  • 示例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")
    

更新(2018年4月23日)

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

  • 文档:

    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参数在内部实施。

更新(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()
    

答案 2 :(得分:11)

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

from selenium.webdriver.support.ui import WebDriverWait

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

self.driver = webdriver.Chrome(
            executable_path=DRIVER_PATH, chrome_options=chrome_options)

答案 3 :(得分:4)

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

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

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

答案 4 :(得分:3)

所以在将我的代码更正为:

之后
$ gradle -q foo 
foo: config phase
TRACER xyz before if: pingServer1

TRACER ping before if: pingServer1
TRACER ping inside if: pingServer1

TRACER xyz before if: pingServer2

TRACER ping before if: pingServer2
TRACER ping inside if: pingServer2

groupPing: config phase
foo: exec phase first
foo: exec phase last

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

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

基本上,

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

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

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

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

答案 5 :(得分:1)

已更新 在我的情况下,它可以正常工作:

from selenium import webdriver

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

在2020年发生了变化。对我来说很好。

答案 6 :(得分:0)

  
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)

答案 7 :(得分:0)

chromeoptions=add_argument("--no-sandbox");
add_argument("--ignore-certificate-errors");
add_argument("--disable-dev-shm-usage'")

不是受支持的浏览器

解决方案:

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

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

答案 8 :(得分:0)

上述解决方案不适用于具有Cloudflare保护功能的网站,例如:https://paxful.com/fr/buy-bitcoin

按如下所示修改代理: options.add_argument(“ user-agent = Mozilla / 5.0(Windows NT 6.1; Win64; x64)AppleWebKit / 537.36(KHTML,Gecko一样)Chrome / 84.0.4147.125 Safari / 537.36”)

在此处修复: What is the difference in accessing Cloudflare website using ChromeDriver/Chrome in normal/headless mode through Selenium Python

答案 9 :(得分:0)

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);

答案 10 :(得分:0)

在 Selenium 4 的 alpha 和 beta 版本中有一个选项可以隐藏 chromeDriver.exe 窗口。

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

您可以从 here 查看。要 pip install beta 或 alpha 版本,您可以执行“pip install selenium==4.0.0.a7”或“pip install selenium==4.0.0.b4”(a7 表示 alpha-7,b4 表示 beta-4,因此对于其他版本,您可以修改命令。)要在 python 中导入特定版本的库,您可以查看 here