AttributeError: у объекта «NoneType» нет атрибута «кодировать», ошибка при создании снимка экрана без заголовка Chrome с использованием Selenium - Python - PullRequest
1 голос
/ 07 февраля 2020

Я пытался возиться с селеном в python и запускал его на linux. Я настроил его так, чтобы он мог получить сайт, но так как я использую его в безголовой среде, я хотел сделать снимок экрана, чтобы я мог видеть, что происходит. Всякий раз, когда я пытаюсь сделать снимок экрана, я просто получаю это сообщение, как показано ниже:

as shown here

Мой python код выглядит следующим образом:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os

#Setup Chrome in headless
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")

#Chrome driver
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://www/google.com")

#Capture the screen
driver.save_screenshot("screen.png")
driver.close()

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

В последнее время эта проблема возникла для

  • без сервера - chrome v1.0.0-53

  • ChromeDriver 2.41 .578700

Причина в том, что размер изображения слишком велик.

Поэтому уменьшите размер окна, например, до 768x1024

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
...
chrome_options.add_argument('--window-size=768x1024')

И если Вы делаете снимки экрана полной страницы - ограничьте высоту

width = driver.execute_script('return document.body.parentNode.scrollWidth')
height = driver.execute_script('return document.body.parentNode.scrollHeight')
height = height if height < 10000 else 10000
driver.set_window_size(width, height)
driver.save_screenshot(image_path)
0 голосов
/ 08 февраля 2020

Немного неубедительно за причину, по которой вы видите ошибку как:

AttributeError: 'NoneType' object has no attribute 'encode'

Однако, если вы используете последнюю версию Selenium ' клиентовi.e. Selenium v3.141.0 , вместо add_argument("--headless") необходимо установить атрибут headless как True.


Мне удалось выполнить Ваш собственный кодовый блок с упомянутыми выше изменениями и некоторыми незначительными изменениями следующим образом:

  • Кодовый блок:

    options = webdriver.ChromeOptions()
    options.headless = True
    options.add_argument('window-size=1400,600')
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get("https://www/google.com")
    driver.save_screenshot("screen.png") #Capture the screen
    driver.quit()
    

Ссылки

Вы можете найти пару подробных обсуждений в:

...