<p>当使用<em>Selenium客户端3.11.x</em>,<em>ChromeDriver v2.38</em>和<em>Google Chrome v65.0.3325.181</em>在<strong>无头模式时,您必须考虑以下几点:</p>
<ul>
<li>您需要添加参数<strong><code>--headless</code></strong>才能在无头模式下调用Chrome。</li>
<li>对于<em>Windows操作系统</em>您需要添加参数<strong><code>--disable-gpu</code></strong></li>
<li>根据<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=737678" rel="noreferrer">Headless: make --disable-gpu flag unnecessary</a><code>--disable-gpu</code>,在<em>Linux系统</em>和<em>MacOS</em>上不需要标志。</li>
<li>根据<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=729961" rel="noreferrer">SwiftShader fails an assert on Windows in headless mode</a><code>--disable-gpu</code>标记在<em>Windows系统</em>上也将变得不必要。</li>
<li>参数<strong><code>start-maximized</code></strong>对于最大化的<strong>视区是必需的。
<ul>
<li>这是有关<a href="https://www.w3schools.com/css/css_rwd_viewport.asp" rel="noreferrer"><strong>Viewport</strong></a>的详细信息的链接。</li>
</ul></li>
<li><p>您可能需要添加参数<strong><code>--no-sandbox</code></strong>以绕过操作系统安全模型。</p>
<ul>
<li>这是<a href="https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md" rel="noreferrer"><strong>Sandbox</strong></a>故事的链接。</li>
</ul></li>
<li><p>示例Windows代码块:</p>
<pre><code>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")
</code></pre></li>
<li><p>Linux代码块示例:</p>
<pre><code>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")
</code></pre></li>
</ul>
<hr/>
<h2>更新(2018年4月23日)</h2>
<p>由于方法<a href="https://seleniumhq.github.io/selenium/docs/api/py/webdriver_chrome/selenium.webdriver.chrome.options.html#selenium.webdriver.chrome.options.Options.set_headless" rel="noreferrer"><strong>^{<cd7>}</strong></a>的可用性,以编程方式在无头模式下调用Google Chrome浏览器变得容易得多:</p>
<ul>
<li><p>文件:</p>
<pre><code>set_headless(headless=True)
Sets the headless argument
Args:
headless: boolean value indicating to set the headless option
</code></pre></li>
<li><p>示例代码:</p>
<pre><code>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()
</code></pre></li>
</ul>
<blockquote>
<p><strong>Note</strong> : <code>--disable-gpu</code> argument is implemented internally.</p>
</blockquote>
<hr/>
<h2>更新(2018年10月13日)</h2>
<p>要在headless模式下调用Chrome浏览器,只需通过<code>Options()</code>类设置<code>--headless</code>属性,如下所示:</p>
<ul>
<li><p>示例代码:</p>
<pre><code>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()
</code></pre></li>
</ul>
<hr/>
<h2>奥特罗</h2>
<p><a href="https://stackoverflow.com/questions/46753393/how-to-make-firefox-headless-programmatically-in-selenium-with-python/46768243#46768243">How to make firefox headless programmatically in Selenium with python?</a></p>
<hr/>
<h2>tl;博士</h2>
<p>这是<a href="https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md" rel="noreferrer"><strong>Sandbox</strong></a>故事的链接。</p>