IgnoreZoomLevel プロパティを設定するとエラーなしでブラウザーを開くことができますが、テストでは 100% 以外のズーム レベルの要素は検出されません。
また、システムの DPI 設定によっては、Ctrl+0 を送信しても常に期待どおりの結果が得られるとは限りません。[中] (120 dpi) または [大] (144 dpi) (Windows 7 設定) を選択した場合、Ctrl+0 でズームが 125% または 150% に設定されます。
私が見つけた回避策は、IE を開く前にレジストリで設定を編集して、DPI 設定に従ってズーム レベルを設定することです。すべてが HKEY_CURRENT_USER の下にあるため、これには管理者権限は必要ありません。
これは私が思いついた小さなヘルパー クラスです。(C#)
using Microsoft.Win32;
namespace WebAutomation.Helper
{
public static class InternetExplorerHelper
{
private static int m_PreviousZoomFactor = 0;
public static void SetZoom100()
{
// Get DPI setting.
RegistryKey dpiRegistryKey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop\\WindowMetrics");
int dpi = (int)dpiRegistryKey.GetValue("AppliedDPI");
// 96 DPI / Smaller / 100%
int zoomFactor100Percent = 100000;
switch (dpi)
{
case 120: // Medium / 125%
zoomFactor100Percent = 80000;
break;
case 144: // Larger / 150%
zoomFactor100Percent = 66667;
break;
}
// Get IE zoom.
RegistryKey zoomRegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Zoom", true);
int currentZoomFactor = (int)zoomRegistryKey.GetValue("ZoomFactor");
if (currentZoomFactor != zoomFactor100Percent)
{
// Set IE zoom and remember the previous value.
zoomRegistryKey.SetValue("ZoomFactor", zoomFactor100Percent, RegistryValueKind.DWord);
m_PreviousZoomFactor = currentZoomFactor;
}
}
public static void ResetZoom()
{
if (m_PreviousZoomFactor > 0)
{
// Reapply the previous value.
RegistryKey zoomRegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Zoom", true);
zoomRegistryKey.SetValue("ZoomFactor", m_PreviousZoomFactor, RegistryValueKind.DWord);
}
}
}
}
さまざまなシステム DPI 設定でのレジストリの ZoomFactor 値と IE ズームを 100% に設定して比較した値を思いつきました。新しい Windows バージョンには 3 つ以上の DPI 設定があるため、それらが必要な場合はクラスを拡張する必要があります。
これを変更して、必要なズームレベルを計算することもできますが、それは私には関係ありませんでした.
InternetExplorerHelper.SetZoom100();
IEを開く前とInternetExplorerHelper.ResetZoom()
閉じた後に呼び出すだけです。