如何在Firefox或Chrome中使用Selenium Webdriver更改屏幕快照的目标目录

时间:2018-07-11 13:33:52

标签: python selenium selenium-webdriver webdriver selenium-chromedriver

我想制作一个网页截图,并使用 Selenium webdriver和Python 将其保存在自定义位置。我尝试使用Firefox和Chrome将屏幕快照保存到自定义位置,但始终将屏幕快照保存在项目目录中。这是我的Firefox版本:

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.dir", 
'C:\\Users\\User\\WebstormProjects')
binary = FirefoxBinary("C:\\Program Files\\Mozilla Firefox\\firefox.exe")


def foxScreen():
    driver = webdriver.Firefox(firefox_binary=binary, 
    firefox_profile=profile)
    driver.get("http://google.com")
    driver.save_screenshot("foxScreen.png")
    driver.quit()


if __name__ == '__main__':
    foxScreen()

这是我的Chrome版本:

from selenium import webdriver

options = webdriver.ChromeOptions()
prefs = {"download.default_directory": r'C:\\Users\\User\\WebstormProjects',
         "directory_upgrade": True}
options.add_experimental_option("prefs", prefs)
chromedriver = 
"C:\\Users\\User\\Downloads\\chromedriver_win32\\chromedriver.exe"


def chromeScreen():
    driver = webdriver.Chrome(chrome_options=options, 
                              executable_path=chromedriver)
    driver.get("http://google.com")
    driver.save_screenshot("chromeScreen.png")
    driver.quit()


if __name__ == '__main__':
    chromeScreen()

我尝试将屏幕快照保存到的位置使用了不同的符号,但这似乎无济于事。我应该更改什么,以便它不会将屏幕截图保存到项目目录中,而是保存到给定的自定义位置?

2 个答案:

答案 0 :(得分:2)

您需要考虑以下两个事实:

profile.set_preference('key','value')

set_preference(key, value)设置我们在firefox_profile中想要的 preference 。当调用特定的 Firefox配置文件时,此首选项有效。

save_screenshot(文件名)

根据文档save_screenshot(filename),将当前窗口的屏幕截图保存到PNG图像文件中。如果存在任何IOError,则此方法返回False,否则返回True。 在文件名中使用完整路径

  • Args

    filename: The full path you wish to save your screenshot to. This should end with a .png extension.
    
  • Usage

    driver.save_screenshot(‘/Screenshots/foo.png’)
    

因此, save_screenshot(filename) 需要将屏幕快照保存到的完整路径。当您使用时:

driver.save_screenshot("foxScreen.png")

因此,屏幕截图始终保存在项目目录中。

解决方案

要将屏幕截图保存在其他目录中,您需要按如下所示传递绝对路径

driver.save_screenshot("./my_directory/foo.png")

答案 1 :(得分:1)

可以尝试添加更多选项。这对我有用:

prefs = {"download.default_directory": r"\download\directory",
         "download.prompt_for_download": False,
         "download.directory_upgrade": True,
         "safebrowsing.enabled": True}