如何通过geckodriver从Selenium Firefox Webdriver中读取首选项并获取配置文件设置的值?

时间:2019-01-06 19:17:59

标签: python selenium firefox geckodriver selenium-firefoxdriver

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

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

但是,我不知道如何读取设置的当前值?

2 个答案:

答案 0 :(得分:1)

它们位于default_preferences实例属性中:

print(profile.default_preferences)

看代码,它是一本字典。

答案 1 :(得分:1)

如果您正在寻找硒中没有显示的首选项/设置(它从文件“ 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()