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)从进程中关闭注册表项是一个很好的做法。这对我很有用,非常感谢