Python保护设置

Python保护设置,python,internet-explorer,selenium,selenium-webdriver,Python,Internet Explorer,Selenium,Selenium Webdriver,我在中遇到了一个自动化保护设置的问题,即使用Selenium和python 我找到了一个在java中自动设置的解决方案,但当我将其更改为python时,它不起作用 我尝试了以下方法: from selenium import webdriver caps=webdriver.DesiredCapabilites.INTERNETEXPLORER caps['INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS']=True driver=webdri

我在
中遇到了一个自动化保护设置的问题,即使用Selenium和python

我找到了一个在java中自动设置的解决方案,但当我将其更改为python时,它不起作用

我尝试了以下方法:

from selenium import webdriver

caps=webdriver.DesiredCapabilites.INTERNETEXPLORER
caps['INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS']=True
driver=webdriver.Ie(caps)
这给了一个错误的论点

当我使用
driver=webdriver.Ie()
它说所有区域的保护模式设置必须相同

有人能帮我在python中使用selenium自动化这件事吗
忽略受保护的节点设置

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities.INTERNETEXPLORER
caps['ignoreProtectedModeSettings'] = True

driver = webdriver.Ie(capabilities=caps)

在某些情况下,所需的功能不起作用。以下是使用winreg从注册表更改保护设置的方法

from winreg import *

    def Enable_Protected_Mode():
        # SECURITY ZONES ARE AS FOLLOWS:
        # 0 is the Local Machine zone
        # 1 is the Intranet zone
        # 2 is the Trusted Sites zone
        # 3 is the Internet zone
        # 4 is the Restricted Sites zone
        # CHANGING THE SUBKEY VALUE "2500" TO DWORD 0 ENABLES PROTECTED MODE FOR THAT ZONE.
        # IN THE CODE BELOW THAT VALUE IS WITHIN THE "SetValueEx" FUNCTION AT THE END AFTER "REG_DWORD".
        #os.system("taskkill /F /IM iexplore.exe")
        try:
            keyVal = r'Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1'
            key = OpenKey(HKEY_CURRENT_USER, keyVal, 0, KEY_ALL_ACCESS)
            SetValueEx(key, "2500", 0, REG_DWORD, 0)
            print("enabled protected mode")
        except Exception:
            print("failed to enable protected mode")

如果能力模式不起作用,有一种替代方法

from selenium import webdriver
from selenium.webdriver.ie.options import Options

ie_options = Options()
ie_options.ignore_protected_mode_settings = True
driver = webdriver.Ie(options=ie_options)
driver.get('http://www.google.com')

这里是Dinesh代码的另一个变体,用于禁用注册表中的受保护模式。它还会关闭连接

只需将此代码放在selenium自动化代码之前,它就会准备好浏览器

import winreg

def set_reg(REG_PATH, name, value):
    try:
        winreg.CreateKey(winreg.HKEY_CURRENT_USER, REG_PATH)
        with winreg.OpenKey(winreg.HKEY_CURRENT_USER, REG_PATH, 0, winreg.KEY_WRITE) as registry_key:
            winreg.SetValueEx(registry_key, name, 0, winreg.REG_DWORD, value)
            winreg.CloseKey(registry_key)
            return True
    except WindowsError:
        return False

for i in range(1,5): set_reg(r"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\\" + str(i),'2500', 3)
改编自Mash和icc97在本线程中给出的最上面的答案:

+1,但您应该认真解决根本问题。。。。我的意思是,无论如何不要这样做!谢谢你的回答。当我将此解决方案与IEDriverServer一起使用时,它可以正常工作。然而,当我尝试在selenium 2.26中使用这段代码时,如果ie可以在没有IEDriverServer的情况下打开,我就无法做到这一点。您能告诉我如何将其复制到早期的selenium版本中,其中IEDriverServer是可选的手动更改设置是一个简单的选项,到目前为止我一直依赖它。但我在一个自动化框架上工作,它在虚拟机上调用ie。我遇到的问题是,尽管我手动更改了受保护模式的设置,但当我从远程机器调用ie时,它试图使用默认设置加载ie,因此它再次表示必须将保护区级别设置为单个值。这就是为什么我试图自动化保护模式设置的原因。有人能提到提到“ignoreProtectedModeSettings”的文档链接吗。我在网上到处都找不到。下面维韦克的回答对我很有帮助。这是这个答案的更新版本谢谢,这是我最好的选择。只要编辑可以在没有特殊用户权限的情况下进行,这就是一个很好的交钥匙解决方案。我在我的电脑上没有管理员权限,它仍然有效。我想补充一点,在结束时使用CloseKey(key)从进程中关闭注册表项是一个很好的做法。这对我很有用,非常感谢