Python中的Selenium:将Firefox配置文件设置为webdriver似乎不起作用

时间:2016-05-18 00:02:52

标签: python selenium firefox

我希望能够使用Selenium从带有Python脚本的网站下载文件。我的问题是创建和设置Firefox配置文件到Firefox webdriver实例似乎不起作用...这是我的代码:

 profile = webdriver.FirefoxProfile();

 profile.set_preference("browser.download.folderList", 2);
 profile.set_preference("browser.download.manager.showWhenStarting", False);
 profile.set_preference("browser.download.dir", os.getcwd());
 profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/xml");
 profile.update_preferences();

 browser = webdriver.Firefox(firefox_profile=profile);

即使使用上述设置,打开/保存对话框仍然会打开,并且不会进行下载。然后我尝试做一些更简单的事情:

profile = webdriver.FireforProfile();

profile.set_preference("browser.startup.homepage", "http://www.google.com");
profile.update_preferences();

browser = webdriver.Firefox(firefox_profile=profile);

我得到的只是firefox打开,就是这样。这让我相信配置文件没有设置为驱动程序。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的任何人,这里都有一个函数,该函数将返回带有一些常用选项的webdriver。它不应该具有Firefox配置文件的硬编码路径,但是我还没有解决这个问题

def get_firefox_driver(download_dir=None, use_profile=False, headless=False):

    if download_dir is None:
        download_dir = os.getcwd()
    if use_profile:
        try:
            fp = webdriver.FirefoxProfile(r'C:\Users\MDDT0040\AppData\Roaming\Mozilla\Firefox\Profiles\u5jvcbqp.dev-edition-default-1525796820341',)
        except:
            print('cant get profile')
            fp = webdriver.FirefoxProfile()
    else:
        fp = webdriver.FirefoxProfile()

    fp.set_preference("browser.download.folderList", int(2))
    fp.set_preference("browser.download.manager.showWhenStarting", False)
    fp.set_preference("browser.download.manager.showAlertOnComplete", False)
    fp.set_preference("browser.download.dir", download_dir)
    fp.set_preference('browser.helperApps.neverAsk.saveToDisk',
                      "text/csv,text/comma-separated-values,text/comma-separated-values;charset=UTF-8")
    if headless:
        options = Options()
        options.headless = True
        return webdriver.Firefox(firefox_profile=fp, firefox_options=options)
    else:
        return webdriver.Firefox(firefox_profile=fp)