SeleniumでEdge(Chromium版)をヘッドレスモードで利用する。
Edgeのバージョン
Edgeには2つのバージョンがあります。
- レガシー版Edge
Windows10に標準機能として提供されていたEdge
InternetExplorerから派生したEdgeHTMLベースのEdge
(2021年3月9日サポート終了予定) - Chromium版Edge
2020年1月15日にリリースされた、オーブソースであるChromiumベースのEdge
(現在はこちらが提供されている)
InternetExplorerとレガシー版のEdgeには、ヘッドレスモードがありません。
Chomium版のEdgeは、ヘッドレスモードで動かすことができます。
ヘッドレスモードは、画面を描画しないので
- 通常のEdgeより高速で、リソースの消費も少ない
- Linuxなど、GUIを持たない環境でも利用できる
- バックグラウンドで処理されるのでPCを占有しない。
Seleniumが動作している間も、ユーザーは別作業ができる。
といった特長があります。
ヘッドレスモードでEdgeDriver(Chromium版)を起動する
EdgeDriverのEdgeOptionsクラスを利用します。
add_argumentメソッドを使用して、起動時のオプションに【headless】を追加します。
#msedge-selenium-toolsが必要
#pip install msedge-selenium-tools
from msedge.selenium_tools import Edge, EdgeOptions
#from selenium.webdriver.edge.options import Options
options = EdgeOptions()
options.use_chromium = True
options.add_argument('--headless')
path = r'D:\tmp\driver\Edge\msedgedriver.exe'
driver = Edge(executable_path=path, options=options)
driver.get('https://google.com')
driver.get_screenshot_as_file(r"D:\tmp\sc1.png") #上書きOK
driver.quit()
/* selenium-java-4.0.0-alpha-7が必要
* ダウンロード元:https://www.selenium.dev/downloads/
*/
package example;
import java.io.*;
import org.apache.commons.io.*;
//import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.OutputType;
public class headless_edge {
public static void main( String[] args )
{
EdgeOptions options = new EdgeOptions();
options.addArguments("--headless");
System.setProperty("webdriver.edge.driver", "D:\\tmp\\driver\\Edge\\msedgedriver.exe");
EdgeDriver driver = new EdgeDriver(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();
}
}
// Microsoft.Edge.SeleniumToolsが必要
using System;
using OpenQA.Selenium;
//using OpenQA.Selenium.Edge;
using Microsoft.Edge.SeleniumTools;
namespace example
{
class Program
{
static void Main(string[] args)
{
EdgeOptions options = new EdgeOptions();
options.UseChromium = true;
options.AddArgument("--headless");
String path = @"D:\tmp\driver\Edge"; //フォルダを指定
EdgeDriver driver = new EdgeDriver(path, options);
driver.Navigate().GoToUrl("https://google.com");
Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
ss.SaveAsFile(@"D:\tmp\sc1.png", ScreenshotImageFormat.Png); //上書きOK
driver.Quit();
}
}
}
' Microsoft.Edge.SeleniumToolsが必要
Imports OpenQA.Selenium
Imports Microsoft.Edge.SeleniumTools
'Imports OpenQA.Selenium.Edge
Module Module1
Sub Main()
Dim options = New EdgeOptions()
options.UseChromium = True
options.AddArgument("--headless")
Dim path = "D:\\tmp\\driver\\Edge" 'フォルダを指定
Dim driver = New EdgeDriver(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
# selenium-webdriver 4.0.0が必要
# gem install selenium-webdriver --pre
gem "selenium-webdriver", "4.0.0.alpha7"
require "selenium-webdriver"
options = Selenium::WebDriver::EdgeChrome::Options.new
options.add_argument('--headless')
Selenium::WebDriver::Edge::Service.driver_path = 'D:\tmp\driver\Edge\msedgedriver.exe'
driver = Selenium::WebDriver.for :edge_chrome , options: options
driver.get("https://google.com")
driver.save_screenshot("D:\\tmp\\sc1.png") #上書きOK
driver.quit()
/* edge-selenium-toolsが必要
* npm install @microsoft/edge-selenium-tools
*/
const fs = require('fs');
let edge = require('selenium-webdriver/edge');
//let webdriver = require('selenium-webdriver');
let options = new edge.Options();
options.setEdgeChromium(true);
options.addArguments("--headless");
let path = "D:\\tmp\\driver\\edge\\msedgedriver.exe";
let service = new edge.ServiceBuilder(path).build();
(async () => {
var driver = await edge.Driver.createSession(options, service);
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();
})();
プログラムを実行すると、画面上には何も現れませんが、Edgeが起動します。
ブラウザの画面イメージも取得可能です。
取得イメージ
2021-01-26Selenium Tips--headless,EdgeDriver,EdgeOptions
Posted by sj
ディスカッション
コメント一覧
まだ、コメントがありません