Сохранение скриншота из селена в абсолютный путь - PullRequest
1 голос
/ 28 марта 2020

В настоящее время я пытаюсь написать скрипт (для подключения к проекту Django), чтобы сделать снимок экрана полной страницы веб-сайта с использованием Selenium.

Кажется, все работает нормально - путь (fullimsavepath) строится нормально (отсюда выводится команда print для вывода, чтобы я мог видеть), селен не сообщает об ошибках, и сценарий завершается нормально. Однако

, когда я ищу фактический скриншот в указанном пути, он там не существует. Что я делаю неправильно? Это как-то связано с относительными и абсолютными путями?

Запуск Python 3.8 на Windows внутри pipenv.

Код:

import time
import os
from sitehawk.settings import BASE_DIR
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from datetime import datetime, date


def takescreenshot(url='http://www.google.com', filename='testpng1'):

    options = webdriver.ChromeOptions()
    options.headless = True
    # Need to replace executable path with environment variable or similar for production?
    # At the moment it's an absolute path to the driver
    driver = webdriver.Chrome(options=options,executable_path=r'C:/Users/gapbr/Documents/dev/sitehawk/sitehawk-project/screenshots/driver/chromedriver.exe')
    driver.get(url)

    # Set the path where the image should be saved
    actualdate = datetime.now()
    yr = actualdate.strftime('%Y')
    mn = actualdate.strftime('%m')
    filepng = filename+'.png'
    fullimsavepath = os.path.join(BASE_DIR,'screenshots','captured-files',yr,mn,filepng)
    print(fullimsavepath)

    # Take the screenshot
    S = lambda X: driver.execute_script('return document.body.parentNode.scroll'+X)
    driver.set_window_size(S('Width'),S('Height')) # May need manual adjustment
    driver.find_element_by_tag_name('body').screenshot(fullimsavepath)

    driver.quit()

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Я очень мало знаю о python. Но, для вашей справки, я использовал приведенный ниже код в своем проекте C#, чтобы сделать скриншот. Я надеюсь, что вы получите некоторые идеи из этого:

static public void getCapture(string No = "1")
    {
        //Screenshot
        Screenshot ss = ((ITakesScreenshot)Tests.driver).GetScreenshot();
        DateTime dt = DateTime.Now;
        //Saving_the_screenshot_with_a_filename
        var title = dt.ToString("yyyyMMddHHmm") + "_" + No + ".png";
        string file = System.IO.Path.Combine(appSettings.Settings["ScreenShotPath"].Value);
        if (string.IsNullOrEmpty(file))
        {
            file = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        }
        ss.SaveAsFile(file + @"\" + title);
    }
0 голосов
/ 28 марта 2020

Возможно Python имеет удвоение литералов, как Java. Попробуйте удвоить косые черты в пути следующим образом:

driver = webdriver.Chrome(options=options,executable_path=r'C://Users/gapbr//Documents//dev//sitehawk//sitehawk-project//screenshots//driver//chromedriver.exe')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...