Загрузка скриншота, сделанного Selenium, в Amazon S3 - PullRequest
0 голосов
/ 05 февраля 2020

Мне нужно загрузить скриншот, сделанный с помощью Selenium, в корзину Amazon S3. В моем проекте Django я сделал:

if not instance.picture:
    chrome_options = webdriver.ChromeOptions()
    chrome_options.binary_location = settings.GOOGLE_CHROME_BIN
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--no-sandbox")
    driver = webdriver.Chrome(executable_path=settings.CHROMEDRIVER_PATH, chrome_options=chrome_options)

    driver.get('http://%s' % instance.domain)
    driver.save_screenshot(slugify(instance.display_name))
    instance.picture = "media/websites/%s.png" % slugify(instance.display_name)
    instance.save()
    driver.close()

Моя картинка определена в моей модели:

picture = models.ImageField(upload_to='websites', blank=True, null=True)

Но, к сожалению, этот файл никогда не создается в корзину.

1 Ответ

0 голосов
/ 05 февраля 2020

Я наконец нашел способ сделать:

@receiver(post_save, sender=Website)
def generate_website_capture(sender, instance, created, **kwargs):
    if not instance.picture:
        chrome_options = webdriver.ChromeOptions()
        chrome_options.binary_location = settings.GOOGLE_CHROME_BIN
        chrome_options.add_argument("--headless")
        chrome_options.add_argument("--disable-dev-shm-usage")
        chrome_options.add_argument("--no-sandbox")
        driver = webdriver.Chrome(executable_path=settings.CHROMEDRIVER_PATH, chrome_options=chrome_options)

        driver.get('http://%s' % instance.domain)
        driver.get_screenshot_as_file(settings.BASE_DIR + "/media/websites/%s.png" % slugify(instance.display_name))
        driver.close()

        with open(settings.BASE_DIR + "/media/websites/%s.png" % slugify(instance.display_name), 'rb') as picture:
            instance.picture.save("%s.png" % slugify(instance.display_name), File(picture), save=True)

        os.remove(settings.BASE_DIR + "/media/websites/%s.png" % slugify(instance.display_name))

Я думаю, что есть лучшее решение, но оно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...