UnicodeEncodeError: 'charmap' codec can't encode character

Доброго дня!
Недавно взялся за webdriver и решил парсить хабр.

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.get('http://habrahabr.ru/')

list_of_titles = driver.find_elements_by_xpath("//h1[@class='title']/a[@class='post_title']")

for title in list_of_titles:
   	print(title.text)
driver.close()

в результате ошибка:

    print(title.text)
  File "C:\Python34\lib\encodings\cp866.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2014' in position 15: character maps to <undefined>

Я так понимаю, что нужно просто знать какая кодировка у хабра? Если так, то где это узнать?

Кроме того есть другая проблема. Скрипты с вебдрайвером создают темповые файлы, которые остаются в системе. Хотелось бы их за собой подчищать.

Спасибо!

  1. Unicode error:
    Кажется это про твою проблему В Python выдает ошибку UnicodeEncodeError? — Хабр Q&A

  2. Удалять файлы
    Если очень хочется то можешь заюзать shutil.rmtree чтобы удалить все дерево, или os.remove, чтобы удалять файлы по одиночке. Но кажется, что темповые файлы не нужно удалять, если они создаются в темповой директории, которую очищает операционная система после перезагрузки.

Кстати говоря, перед выходом из тестов лучше помимо driver.close() сделать и driver.quit() потом. Это нужно чтобы остановить запущенный сервис (в случае firefox это сам браузер, в отличие от chrome’подобных браузеров, где между браузером и pyselenium’ом стоит chromedriver. Firefox поддерживает протокол selenium’a за счет расширения, которое устанавливается внутрь Firefox и слушает команды): selenium/webdriver.py at trunk · SeleniumHQ/selenium · GitHub

Отличие close от quit в том, что close - это закрытие вкладки (в данном случае у тебя одна, поэтому и закрывается браузер) а quit - это именно завершение процесса браузера

вот еще из документалки PrintFails - Python Wiki

Укажите в начале файла кодировку # -- coding: utf-8 --

Во-первых # -*- coding: utf-8 -*-. Во-вторых в python3 это не нужно, потому что в utf-8 уже по умолчанию. К этой проблеме utf-8 не имеет отношения.
Проблема в том, что виндовая консоль имеет кодировку cp866 и не умеет отображать символ “—”, поэтому ошибка в C:\Python34\lib\encodings\cp866.py.

Спасибо за хорошее объяснение, буду знать.

Не помогло. Всё та же ошибка.

# -- coding: utf-8 --
from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.get('http://habrahabr.ru/')

list_of_titles = driver.find_elements_by_xpath("//h1[@class='title']/a[@class='post_title']")

for title in list_of_titles:
	print(title.text.encode().decode('utf-8', 'ignore'))
driver.close()
driver.quit()

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

Это я сделал: habro_geeko_parser/habro_geeko_parser.py at master · Gennadiii/habro_geeko_parser · GitHub

Мысль была в том, чтобы сохранять в файл только первую статью. При следующем заходе считывать данные файла и останавливать поиск при нахождении статьи из файла. + отфильтровывать неинтересные статьи.

Вообщем, жаль, что не получилось с консолью. Всё работает для Python IDLE.