web-dev-qa-db-ja.com

Seleniumを介してヘッドレスモードでChromeブラウザを開始するようにChromeDriverを構成する方法

私はpythonスクリプトをweb-scrapeに取り組んでおり、Chromedriverをパッケージの1つとして使用する道を進んでいます。これをポップアップウィンドウなしでバックグラウンドで動作させたい。私は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"

私がやろうとしたことは、オプションのウィンドウサイズを0x0に変更することですが、.exeファイルがまだポップアップしているので、それが何をしたのかわかりません。

私はこれをどのように行うことができますか?

私はPython 2.7 FYIを使用しています

33
Maz

だから私のコードを修正した後:

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:\ SampleFolder\ThisIsMyScript.py%*

  3. .txtファイルを保存し、拡張子を.batに変更します

  4. これをダブルクリックしてファイルを実行します

そのため、これでコマンドプロンプトでスクリプトが開かれ、ChromeDriverは画面の前面に飛び出して問題を解決せずにこのウィンドウ内で動作しているようです。

3
Maz

次のようになります。

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でも機能すると確信しています。

pdate 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)
63
Daniel Porteous

Selenium Client 3.11.xChromeDriver v2.38およびGoogle Chrome v65.0.3325.181 inヘッドレスモードでは、次の点を考慮する必要があります:

  • ヘッドレスモードでChromeを呼び出すには、引数--headlessを追加する必要があります。
  • Windows OSシステムの場合、引数を追加する必要があります--disable-gpu
  • ヘッドレス:--disable-gpuフラグを不要にする--disable-gpuフラグはLinux SystemsおよびMacOSでは不要です。
  • SwiftShaderはWindowsでヘッドレスモードのアサートに失敗します--disable-gpuフラグはWindows Systemsでも不要になります。
  • 引数start-maximizedは、最大化Viewportに必要です。
    • Viewport に関する詳細へのリンクです。
  • OSセキュリティモデルをバイパスするには、引数--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日)

Google Chrome Browserで呼び出すヘッドレスモードメソッドを使用できるようになったことで、プログラム的にはるかに簡単になりました 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引数は内部的に実装されています。


更新(2018年10月13日)

ヘッドレスモードでChromeブラウザを呼び出すには、次のようにOptions()クラスを介して--headlessプロパティを設定するだけです。

  • サンプルコード:

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

アウトロ

pythonを使用してSeleniumでプログラムでFirefoxをヘッドレスにする方法


tl;博士

Sandbox ストーリーへのリンクです。

40
DebanjanB
  1. とにかく.exeが実行されます。 Googleによると-「ヘッドレスモードで実行します。つまり、UIまたはディスプレイサーバーに依存せずに実行します。」

  2. コマンドライン引数の前にダッシュを2つ追加する、つまりoptions.add_argument('--headless')

  3. ヘッドレスモードでは、GPUを無効にすることも推奨されます。つまり、options.add_argument('--disable-gpu')

4
Aurel Branzeanu