SeleniumでヘッドレスFirefoxを利用する
Firefoxには、GUIを持たないヘッドレスモードがあります。
画面を描画しないので
- 通常のFirefoxより高速で、リソースの消費も少ない
- Linuxなど、GUIを持たない環境でも利用できる
- バックグラウンドで処理されるのでPCを占有しない。
Seleniumが動作している間も、ユーザーは別作業ができる。
といった特長があります。
ヘッドレスモードでFirefoxDriverを起動する
FirefoxDriverのFirefoxOptionsクラスを利用します。
add_argumentメソッドを使用して、起動時のオプションに【headless】を追加します。
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument('--headless')
path = r'D:\tmp\driver\geckodriver-v0.25.0-win64\geckodriver.exe'
driver = webdriver.Firefox(executable_path=path, options=options)
driver.get('https://google.com')
driver.get_screenshot_as_file(r"D:\tmp\sc1.png") #上書きOK
driver.quit()
package example;
import java.io.*;
import org.apache.commons.io.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.OutputType;
public class headless_fx {
public static void main( String[] args )
{
String path = "D:/tmp/driver/geckodriver-v0.25.0-win64/geckodriver.exe";
FirefoxOptions options = new FirefoxOptions();
options.addArguments("--headless");
System.setProperty("webdriver.gecko.driver", path);
WebDriver driver = new FirefoxDriver(options);
driver.get("https://google.com");
File tmp = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try{
System.out.println(tmp);
File sc1 = new File("D:\\tmp\\sc1.png");
FileUtils.forceDelete(sc1);
FileUtils.moveFile(tmp, sc1); //上書きNG
}catch(Exception e){
e.printStackTrace();
}
driver.quit();
}
}
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
namespace example
{
class Program
{
static void Main(string[] args)
{
FirefoxOptions options = new FirefoxOptions();
options.AddArgument("--headless");
String path = @"D:\tmp\driver\geckodriver-v0.25.0-win64";
IWebDriver driver = new FirefoxDriver(path, options);
driver.Navigate().GoToUrl("https://google.com");
Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
ss.SaveAsFile(@"D:\tmp\sc1.png", ScreenshotImageFormat.Png); //上書きOK
driver.Quit();
}
}
}
Imports OpenQA.Selenium
Imports OpenQA.Selenium.Firefox
Module Module1
Sub Main()
Dim options = New FirefoxOptions()
options.AddArgument("--headless")
Dim path = "D:/tmp/driver/geckodriver-v0.25.0-win64"
Dim driver = New FirefoxDriver(path, options)
driver.Navigate().GoToUrl("https://google.com")
Dim ss = driver.GetScreenshot()
ss.SaveAsFile("D:\tmp\sc1.png", ScreenshotImageFormat.Png) '上書きOK
driver.Quit()
End Sub
End Module
require "selenium-webdriver"
options = Selenium::WebDriver::Firefox::Options.new
options.add_argument('--headless')
path = 'D:\tmp\driver\geckodriver-v0.25.0-win64\geckodriver.exe'
driver = Selenium::WebDriver.for :firefox, driver_path:path, options:options
driver.get("https://google.com")
driver.save_screenshot("D:\\tmp\\sc1.png") #上書きOK
driver.quit()
let webdriver = require('selenium-webdriver');
let firefox = require('selenium-webdriver/firefox');
const fs = require('fs');
var options = new firefox.Options;
options.addArguments("--headless");
let path = "D:/tmp/driver/geckodriver-v0.25.0-win64/geckodriver.exe";
(async () => {
var driver = await new webdriver.Builder()
.forBrowser('firefox')
.setFirefoxOptions(options)
.setFirefoxService(new firefox.ServiceBuilder(path))
.build();
await driver.get("https://google.com");
var ss = await driver.takeScreenshot();
fs.writeFile('D:\\tmp\\sc1.png', ss, 'base64', function(err) {
//console.log(err);
});
/* 1行で書く場合
await driver.takeScreenshot().then(function(image){
fs.writeFile('D:\\tmp\\sc1.png', image, 'base64', function(err) {
console.log(err);
});
});*/
await driver.quit();
})();
プログラムを実行すると、画面上には何も現れませんが、Firefoxが起動します。
ブラウザの画面イメージも取得可能です。
ディスカッション
コメント一覧
まだ、コメントがありません