SeleniumからローカルのHTMLファイルを表示

SeleniumでローカルのHTMLファイルを扱うには、fileプロトコルを使用するだけで、特別な操作は必要ありません。ただしInetenet Explorerの場合は「保護モード」を無効にする必要があります。

ローカルファイルの表示

ブラウザで、ローカルにあるファイルを表示するにはファイルプロトコル【file:///】を使用します。
アドレスバーに「file:///パス情報」を入力して表示します。

file:///D:/tmp/test.html
Firefox
file:///D:/tmp/test.html
Chrome
file:///D:/tmp/test.html
Microsoft Edge
file:///D:/tmp/test.html
Internet Explorer11

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.