web-dev-qa-db-ja.com

ヘッドレスでSeleniumを実行するChrome Webdriver

だから私はSeleniumを使っていくつかのことを試しているのですが、本当に速くしたいと思っています。

したがって、ヘッドレスchromeで実行すると、スクリプトが高速になると思います。

まず、その仮定は正しいですか、それともヘッドレスドライバーでスクリプトを実行しても問題ありませんか?

とにかく私はまだそれをヘッドレスで動作させるようにしたいのですが、どういうわけかできません、私は別のことを試しました、そしてほとんどがここの10月のアップデートで述べられているように動作することを示唆しました

ChromeDriverを開始するように設定する方法Chrome Seleniumを介してヘッドレスモードのブラウザ?

しかし、それを試してみると、奇妙なコンソール出力が出て、それでも動作しないようです。

どんなチップも感謝します。

23
Rhynden

クロムヘッドレスを実行するには、--headlessを介してchrome_options.add_argumentを追加するだけです。つまり、

from Selenium import webdriver from Selenium.webdriver.chrome.options import Options
chrome_options = Options()
#chrome_options.add_argument("--disable-extensions")
#chrome_options.add_argument("--disable-gpu")
#chrome_options.add_argument("--no-sandbox) # linux only
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(options=chrome_options)
start_url = "https://duckgo.com"
driver.get(start_url)
print(driver.page_source.encode("utf-8"))
driver.quit()
# b'<!DOCTYPE html><html xmlns="http://www....

つまり、ヘッドレスchromeで実行すると、スクリプトが高速になると思います

chrome --disable-extensions--disable-gpuなどのオプションを使用してベンチマークしてみてください。


参照: headless-chrome

注:現在、chrome headless、runningshouldshould running --disable-gpu flag if your Windowsで実行されています。 crbug.com/737678 を参照してください。

36
Pedro Lobito

Linux環境を使用している場合は、--no-sandboxだけでなく、特定のウィンドウサイズの設定。 --no-sandboxフラグは、ユーザーコンテナを適切に設定した場合、Windowsでは必要ありません。

使用する --disable-gpu Windowsのみ。他のプラットフォームでは必要ありません。 --disable-gpuフラグは、いくつかのバグの一時的な回避策です。

//Headless chrome browser and configure
            WebDriverManager.chromedriver().setup();
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.addArguments("--no-sandbox");
            chromeOptions.addArguments("--headless");
            chromeOptions.addArguments("disable-gpu");
//          chromeOptions.addArguments("window-size=1400,2100"); // Linux should be activate
            driver = new ChromeDriver(chromeOptions);
2
Devdun

コンテナ化されたChromeをインストールして実行します。

docker pull Selenium/standalone-chrome
docker run --rm -d -p 4444:4444 --shm-size=2g Selenium/standalone-chrome

webdriver.Remoteを使用して接続:

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.CHROME)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')
0
Max Malysh
from time import sleep

from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")

driver = webdriver.Chrome(executable_path="./chromedriver", options=chrome_options)
url = "https://stackoverflow.com/questions/53657215/running-Selenium-with-headless-chrome-webdriver"
driver.get(url)

sleep(5)

h1 = driver.find_element_by_xpath("//h1[@itemprop='name']").text
print(h1)

次に、ローカルマシンでスクリプトを実行します

➜ python script.py
Running Selenium with Headless Chrome Webdriver

動作しており、ヘッドレスChromeを使用しています。

0
Serhii

Todo(ヘッドレスサーバーDebian Linux 9.4でテスト済み):

  1. これを行う:

    # install chrome
    curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
    echo "deb [Arch=AMD64]  http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
    apt-get -y update
    apt-get -y install google-chrome-stable
    
    # install chrome driver
    wget https://chromedriver.storage.googleapis.com/77.0.3865.40/chromedriver_linux64.Zip
    unzip chromedriver_linux64.Zip
    mv chromedriver /usr/bin/chromedriver
    chown root:root /usr/bin/chromedriver
    chmod +x /usr/bin/chromedriver
    
  2. Seleniumをインストールします。

    pip install Selenium
    

    これを実行するPythonコード:

    from Selenium import webdriver
    from Selenium.webdriver.chrome.options import Options
    options = Options()
    options.add_argument("no-sandbox")
    options.add_argument("headless")
    options.add_argument("start-maximized")
    options.add_argument("window-size=1900,1080"); 
    driver = webdriver.Chrome(chrome_options=options, executable_path="/usr/bin/chromedriver")
    driver.get("https://www.example.com")
    html = driver.page_source
    print(html)
    
0
Basj