如何阅读首选项,通过壁虎驱动程序从Selenium Firefox网络驱动程序获取配置文件设置的值



我可以使用set_preference设置首选项,例如:

profile = selenium.webdriver.FirefoxProfile()
profile.set_preference('permissions.default.image', 2)

但是,我无法弄清楚如何读取设置的当前值?

它们位于 default_preferences 实例属性中:

print(profile.default_preferences)

查看代码,这是一本字典。

如果你正在寻找一个偏好/设置,它没有在硒中公开(它从一个文件"webdriver_prefs.json"加载它,该文件有它实际需要/可以控制的那些),那么你可以从 about:config 页面本身获取它。

免责声明 - 此方法使用 Firefox js 对象,这些对象可能会在未来版本中更改 - 因此停止工作。

这个想法是 - 打开"about:config",搜索密钥,并获取其值。如果你手动执行此操作,你会看到这不是你通常使用的常规html页面 - 它是一个充满命名空间等的xml。然而,数据存储在 js 对象view 中。

所以流程是 - 打开配置页面,并通过 JS 完成所有工作:

from selenium import webdriver

def get_preference(name):
    """ Runs a JS that a) sets the value of the searched-for setting to the name argument,
        b) looks for the value of the first element in the "table" below.
        Thus the name better be exact, and you'd better be looking for the 1st match :) """
    global driver
    value = driver.execute_script("""
        document.getElementById("textbox").value = arguments[0];
        FilterPrefs();
        view.selection.currentIndex = 0;
        var value = view.getCellText(0, {id:"valueCol"});
        return value;
    """, name)
    return value

if __name__ == '__main__':
    try:
        ff_profile = webdriver.FirefoxProfile()
        ff_profile.set_preference("general.warnOnAboutConfig", False)  # there's a nasty warning opening about:config (another setting not present in the selenium preferences ;)
        driver = webdriver.Firefox(firefox_profile=ff_profile)
        driver.get('about:config')
        print(get_preference('devtools.jsonview.enabled'))
    finally:
        driver.quit()

相关内容

最新更新