在使用python的Windows上使用Selenium Webdriver截取屏幕截图时,屏幕截图直接保存到程序的路径中,有没有办法将.png文件保存到特定目录?
答案 0 :(得分:64)
使用driver.save_screenshot('/path/to/file')
或driver.get_screenshot_as_file('/path/to/file')
:
import selenium.webdriver as webdriver
import contextlib
@contextlib.contextmanager
def quitting(thing):
yield thing
thing.quit()
with quitting(webdriver.Firefox()) as driver:
driver.implicitly_wait(10)
driver.get('http://www.google.com')
driver.get_screenshot_as_file('/tmp/google.png')
# driver.save_screenshot('/tmp/google.png')
答案 1 :(得分:23)
受此线程的启发(Java的相同问题):Take a screenshot with Selenium WebDriver
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.google.com/')
browser.save_screenshot('screenie.png')
browser.quit()
答案 2 :(得分:9)
是的,我们可以使用python webdriver
获取.png的屏幕截图扩展如果你在python webriver.it中工作,请使用下面的代码。非常简单。
driver.save_screenshot('D\folder\filename.png')
答案 3 :(得分:3)
现在确实不是现实,但我也是这样面对这个问题: 看起来像' save_screenshot'在将名称空间添加到文件名以进行转义覆盖的同时创建具有空格的文件时遇到一些麻烦。
这里我有方法来清理我的空格文件名(How do I replace whitespaces with underscore and vice versa?):
def urlify(self, s):
# Remove all non-word characters (everything except numbers and letters)
s = re.sub(r"[^\w\s]", '', s)
# Replace all runs of whitespace with a single dash
s = re.sub(r"\s+", '-', s)
return s
然后
driver.save_screenshot('c:\\pytest_screenshots\\%s' % screen_name)
其中
def datetime_now(prefix):
symbols = str(datetime.datetime.now())
return prefix + "-" + "".join(symbols)
screen_name = self.urlify(datetime_now('screen')) + '.png'
答案 4 :(得分:3)
driver.save_screenshot("path to save \\screen.jpeg")
答案 5 :(得分:3)
这将截取屏幕截图并将其放置在所选名称的目录中。
import os
driver.save_screenshot(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'NameOfScreenShotDirectory', 'PutFileNameHere'))
答案 6 :(得分:2)
您可以使用以下函数作为相对路径,因为在脚本中添加绝对路径不是一个好主意
导入
import sys, os
使用以下代码:
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
screenshotpath = os.path.join(os.path.sep, ROOT_DIR,'Screenshots'+ os.sep)
driver.get_screenshot_as_file(screenshotpath+"testPngFunction.png")
确保您创建.py文件所在的文件夹。
os.path.join
也阻止您在跨平台上运行脚本,例如:UNIX和Windows。它将在运行时根据OS生成路径分隔符。 os.sep
与java
File.separtor
类似
答案 7 :(得分:2)
他们在这里问了一个类似的问题,答案似乎更完整,我离开了源头:
How to take partial screenshot with Selenium WebDriver in python?
from selenium import webdriver
from PIL import Image
from io import BytesIO
fox = webdriver.Firefox()
fox.get('http://stackoverflow.com/')
# now that we have the preliminary stuff out of the way time to get that image :D
element = fox.find_element_by_id('hlogo') # find part of the page you want image of
location = element.location
size = element.size
png = fox.get_screenshot_as_png() # saves screenshot of entire page
fox.quit()
im = Image.open(BytesIO(png)) # uses PIL library to open image in memory
left = location['x']
top = location['y']
right = location['x'] + size['width']
bottom = location['y'] + size['height']
im = im.crop((left, top, right, bottom)) # defines crop points
im.save('screenshot.png') # saves new cropped image
答案 8 :(得分:1)
TakeScreenShot screenshot=new TakeScreenShot();
screenshot.screenShot("screenshots//TestScreenshot//password.png");
它将起作用,请尝试。
答案 9 :(得分:0)
var filterArray = detailArray.filter(
data => data.service === serviceIdentifier,
);
答案 10 :(得分:-1)
使用以下Chrome浏览器网络驱动程序中的 selenium 软件包,查看下面的python脚本以捕获FB主页。
脚本:
导入硒
从硒导入网络驱动程序
导入时间
从导入睡眠时间开始
chrome_browser = webdriver.Chrome()
chrome_browser.get('https://www.facebook.com/')#进入FB登录页面
睡眠(5)
chrome_browser.save_screenshot('C:/Users/user/Desktop/demo.png')#获取FB主页快照
chrome_browser.close()#关闭驱动程序连接
chrome_browser.quit()#关闭浏览器
答案 11 :(得分:-7)
我知道你正在寻找python中的答案,但是这里是如何在ruby中做到的。
http://watirwebdriver.com/screenshots/
如果仅通过仅保存在当前目录中才有效..我首先将图像分配给变量,然后将该变量作为PNG文件保存到磁盘。
例如:
image = b.screenshot.png
File.open("testfile.png", "w") do |file|
file.puts "#{image}"
end
其中b是webdriver使用的浏览器变量。我可以灵活地在“File.open”中提供绝对路径或相对路径,这样我就可以将图像保存到任何地方。