Подтвердить что ты не робот

Скриншот Webdriver

При съемке с помощью Selenium Webdriver на окнах с python скриншот сохраняется непосредственно на пути к программе, есть ли способ сохранить файл .png в определенном каталоге?

4b9b3361

Ответ 1

Используйте 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')

Ответ 2

Вдохновленный из этой темы (тот же вопрос для Java): Сделайте снимок экрана с Selenium WebDriver

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.google.com/')
browser.save_screenshot('screenie.png')
browser.quit()

Ответ 3

Да, у нас есть способ получить расширение экрана .png с помощью python webdriver

используйте ниже код, если вы работаете в python webriver.it очень просто.

driver.save_screenshot('D\folder\filename.png')

Ответ 4

Здесь они задали аналогичный вопрос, и ответ кажется более полным, я оставляю источник:

Как сделать частичный скриншот с Selenium WebDriver в 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

Ответ 5

Конечно, сейчас это не актуально, но я столкнулся с этой проблемой и по-своему: Похоже, что "save_screenshot" имеет некоторые проблемы с созданием файлов с пространством в имени в то же время, когда я добавил рандомизацию в имена файлов для экранирования отмены.

Здесь у меня есть метод для очистки имени файла пробелов (Как заменить пробелы с подчеркиванием и наоборот?):

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'

Ответ 6

driver.save_screenshot("path to save \\screen.jpeg")

Ответ 7

Вы можете использовать функцию ниже для относительного пути, так как абсолютный путь не является хорошей идеей для добавления в скрипт

Импортировать

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.sep похож на File.separtor в Java

Ответ 8

Это сделает скриншот и поместит его в каталог с выбранным именем.

import os
driver.save_screenshot(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'NameOfScreenShotDirectory', 'PutFileNameHere'))

Ответ 9

TakeScreenShot screenshot=new TakeScreenShot();
screenshot.screenShot("screenshots//TestScreenshot//password.png");

это будет работать, пожалуйста, попробуйте.

Ответ 10

WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\\NewFolder\\screenshot1.jpg"));

Ответ 11

Я понимаю, что вы ищете ответ на питоне, но вот как это можно сделать в рубине.

http://watirwebdriver.com/screenshots/

Если это работает только при сохранении в текущем каталоге.. Я бы сначала присвоил образ переменной, а затем сохранил эту переменную на диске в виде файла PNG.

например:

 image = b.screenshot.png

 File.open("testfile.png", "w") do |file|
  file.puts "#{image}"
 end

где b - переменная браузера, используемая webdriver. У меня есть гибкость, чтобы обеспечить абсолютный или относительный путь в "File.open", чтобы я мог сохранять изображение в любом месте.