SeleniumからローカルのHTMLファイルを表示
SeleniumでローカルのHTMLファイルを扱うには、fileプロトコルを使用するだけで、特別な操作は必要ありません。ただしInetenet Explorerの場合は「保護モード」を無効にする必要があります。
ローカルファイルの表示
ブラウザで、ローカルにあるファイルを表示するにはファイルプロトコル【file:///】を使用します。
アドレスバーに「file:///パス情報」を入力して表示します。
SeleniumでローカルのHTMLファイルを表示
Seleniumでローカルファイルを表示する方法は、通常のURL指定と同様、ローカルファイルのアドレスを指定します。
driver.get('file:///D:/tmp/test.html')
IEのエラー
ただし、SeleniumでIEドライバを使用して、ローカルにあるファイルを開こうとするとエラーが発生します。
IEのバージョンは11です。
#selenium 3.141.0
from selenium import webdriver
path = r'D:\tmp\driver\IEDriverServer_Win32_3.14.0\IEDriverServer.exe'
driver = webdriver.Ie(executable_path=path)
driver.get('file:///D:/tmp/test.html')
element=driver.find_element_by_tag_name('p')
print(element.text)
driver.quit()
selenium.common.exceptions.NoSuchWindowException: Message: Unable to get browser
/* selenium-java@3.141.59 */
package example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class ie_local {
public static void main( String[] args )
{
String path = "D:\\tmp\\driver\\IEDriverServer_Win32_3.14.0\\IEDriverServer.exe";
System.setProperty("webdriver.ie.driver", path);
WebDriver driver = new InternetExplorerDriver();
driver.get("file:///D:/tmp/test.html");
WebElement element = driver.findElement(By.tagName("p"));
System.out.println(element.getText());
driver.quit();
}
}
Exception in thread "main" org.openqa.selenium.NoSuchWindowException: Unable to get browser
/* Selenium.WebDriver v3.141.0 */
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
namespace example
{
class Program
{
static void Main(string[] args)
{
String path = @"D:\tmp\driver\IEDriverServer_Win32_3.14.0";
IWebDriver driver = new InternetExplorerDriver(path);
driver.Navigate().GoToUrl("file:///D:/tmp/test.html");
IWebElement element = driver.FindElement(By.TagName("p"));
Console.WriteLine(element.Text);
driver.Quit();
}
}
}
Exception thrown: 'OpenQA.Selenium.NoSuchWindowException' in WebDriver.dll
An unhandled exception of type 'OpenQA.Selenium.NoSuchWindowException' occurred in WebDriver.dll
Additional information: Unable to get browser
'Selenium.WebDriver v3.141.0
Module Module1
Sub Main()
Dim path = "D:/tmp/driver/IEDriverServer_Win32_3.14.0"
Dim driver = New InternetExplorerDriver(path)
driver.Navigate().GoToUrl("file:///D:/tmp/test.html")
Dim element = driver.FindElementByTagName("p")
Debug.Print(element.Text)
driver.Quit()
End Sub
End Module
Exception thrown: 'OpenQA.Selenium.NoSuchWindowException' in WebDriver.dll
An unhandled exception of type 'OpenQA.Selenium.NoSuchWindowException' occurred in WebDriver.dll
Additional information: Unable to get browser
#selenium-webdriver (3.142.7)
require "selenium-webdriver"
Selenium::WebDriver::IE.driver_path = \
'D:\tmp\driver\IEDriverServer_Win32_3.14.0\IEDriverServer.exe'
driver = Selenium::WebDriver.for :ie
driver.get("file:///D:/tmp/test.html")
element = driver.find_element(:tag_name, 'p')
puts element.text
driver.quit()
Uncaught exception: Unable to get browser
/* selenium-webdriver@4.0.0-alpha.8 */
let webdriver = require('selenium-webdriver');
let ie = require('selenium-webdriver/ie');
const By = webdriver.By;
let path = "D:/tmp/driver/IEDriverServer_Win32_3.14.0/IEDriverServer.exe";
(async () => {
var driver = await new webdriver.Builder()
.forBrowser('internet explorer')
.setIeService(new ie.ServiceBuilder(path))
.build();
await driver.get("file:///D:/tmp/test.html");
var element = await driver.findElement(By.css("p"));
console.log(await element.getText());
await driver.quit();
})();
(node:15112) UnhandledPromiseRejectionWarning: NoSuchWindowError: Unable to get browser
IEが起動してHTMLファイルは開くものの、例外が発生します。
エラーメッセージ
Unable to get browser
回避策
IEドライバでローカルファイルを表示するには、IEの設定で「保護モードを有効にする」のチェックを外します。
「インタネットオプション」-「セキュリティ」、「保護モードを有効にする」のチェックを外す。
Seleniumを使用するためには、保護モードを全てのゾーンで一致させる必要があるため、「インターネット」「ローカル イントラネット」「信頼済みサイト」「制限付きサイト」の全てで、チェックを外します。
セキュリティ面で問題があるので、テスト終了後は保護モードを有効に戻すことをお勧めします。
保護モードを無効にして再実行
実行結果
This is a Test Page.
正常に要素が取得できます。
保護モードに齟齬がある場合
保護モードが一致しない場合は、(ローカルファイルと無関係に)IEの起動時にエラーになります。
「制限付きサイト」のみ「保護モードを有効にする」のチェックを外す。
from selenium import webdriver
path = r'D:\tmp\driver\IEDriverServer_Win32_3.14.0\IEDriverServer.exe'
driver = webdriver.Ie(executable_path=path)
#driver.quit()
selenium.common.exceptions.SessionNotCreatedException: Message: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for
all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for
all zones.
package example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class ie_local {
public static void main( String[] args )
{
String path = "D:\\tmp\\driver\\IEDriverServer_Win32_3.14.0\\IEDriverServer.exe";
System.setProperty("webdriver.ie.driver", path);
WebDriver driver = new InternetExplorerDriver();
//driver.quit();
}
}
Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled)
for all zones.
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
namespace example
{
class Program
{
static void Main(string[] args)
{
String path = @"D:\tmp\driver\IEDriverServer_Win32_3.14.0";
IWebDriver driver = new InternetExplorerDriver(path);
//driver.Quit();
}
}
}
Exception thrown: 'System.InvalidOperationException' in WebDriver.dll
An unhandled exception of type 'System.InvalidOperationException' occurred in WebDriver.dll
Additional information: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones. (SessionNotCreated)
Module Module1
Sub Main()
Dim path = "D:/tmp/driver/IEDriverServer_Win32_3.14.0"
Dim driver = New InternetExplorerDriver(path)
'driver.Quit()
End Sub
End Module
Exception thrown: 'System.InvalidOperationException' in WebDriver.dll
An unhandled exception of type 'System.InvalidOperationException' occurred in WebDriver.dll
Additional information: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set
to the same value (enabled or disabled) for all zones. (SessionNotCreated)
require "selenium-webdriver"
Selenium::WebDriver::IE.driver_path = \
'D:\tmp\driver\IEDriverServer_Win32_3.14.0\IEDriverServer.exe'
driver = Selenium::WebDriver.for :ie
#driver.quit()
Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set
to the same value (enabled or disabled) for all zones. (Selenium::WebDriver::Error::SessionNotCreatedError)
let webdriver = require('selenium-webdriver');
let ie = require('selenium-webdriver/ie');
const By = webdriver.By;
let path = "D:/tmp/driver/IEDriverServer_Win32_3.14.0/IEDriverServer.exe";
(async () => {
var driver = await new webdriver.Builder()
.forBrowser('internet explorer')
.setIeService(new ie.ServiceBuilder(path))
.build();
//await driver.quit();
})();
(node:12744) UnhandledPromiseRejectionWarning: SessionNotCreatedError: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones.
エラーメッセージ
Protected Mode settings are not the same for all zones.
ディスカッション
コメント一覧
まだ、コメントがありません