2016-06-15 4 views
2

Я пытаюсь использовать Selenium в Python, чтобы сохранить веб-страницы на MacOS Firefox.Использование Selenium в Python для сохранения веб-страницы в Firefox

До сих пор мне удалось щелкнуть COMMAND + S, чтобы открыть SAVE AS window. Тем не менее,

Я не знаю, как:

  1. изменить каталог файла,
  2. изменить имя файла и
  3. нажмите кнопку SAVE AS.

Может кто-нибудь помочь?

Ниже приведен код, я должен использовать, чтобы нажать COMMAND + S:

ActionChains(browser).key_down(Keys.COMMAND).send_keys("s").key_up(Keys.COMMAND).perform() 

Кроме того, причина для меня, чтобы использовать этот метод в том, что я сталкиваюсь Unicode Encode Ошибка когда: -

  1. напишите файл page_source в html-файле и
  2. магазин сбрасывает информацию в файл csv.

Запись в файл HTML:

file_object = open(completeName, "w") 
html = browser.page_source 
file_object.write(html) 
file_object.close() 

Запись в файл CSV:

csv_file_write.writerow(to_write) 

Ошибка:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xf8' in position 1: ordinal not in range(128)

+0

Я в конечном итоге не используя 'метод SAVE как' и решить проблемы HTML-файл и CSV-файл письма, я использовал кодеки и unicodecsv. Подробнее см. Комментарий RemcoW и этот пост http://stackoverflow.com/questions/18766955/how-to-write-utf-8-in-a-csv-file. –

ответ

3

Вы не можете взаимодействовать с системными диалогах, как сохранить файл диалог. Если вы хотите сохранить страницу HTML вы можете сделать что-то вроде этого:

page = driver.page_source 
file_ = open('page.html', 'w') 
file_.write(page) 
file_.close() 
+1

Получение HTML-кода также можно выполнить с помощью 'driver.page_source'. Это избавляет от необходимости находить элемент html, получая его внешнийHTML вручную. – RemcoW

5

То, что вы пытаетесь достичь, это невозможно сделать с селеном. Диалог, который открывается, не является чем-то, с чем может взаимодействовать Селен.

Закрывает то, что вы могли бы сделать, это собрать page_source, который дает вам весь HTML одной страницы и сохраняет его в файле.

import codecs 

completeName = os.path.join(save_path, file_name) 
file_object = codecs.open(completeName, "w", "utf-8") 
html = browser.page_source 
file_object.write(html) 

Если вам действительно нужно сохранить весь сайт, вы должны изучить его с помощью инструмента, такого как AutoIT. Это позволит взаимодействовать с диалогом сохранения.

+0

Спасибо! Я знаю об этом методе. Тем не менее, для моих веб-страниц содержатся символы, которые вызывают ошибки кодировки Unicode, мне нужно сохранить веб-страницы в исходном формате, чтобы избежать потери важной информации. Пример Unicode Encode Errors ... кодек 'ascii' не может кодировать символ u '\ xf8' в позиции 1: порядковый номер не в диапазоне (128). –

+0

@TommyN Когда вы получаете эту ошибку? При попытке записать файл page_source в файл? – RemcoW

+0

Да, это происходит, когда я пытаюсь написать page_source в html-файле. Знаете ли вы, есть ли какие-либо решения для меня, чтобы свести к минимуму количество информации, потерянной в отношении этих специальных символов? (Я намеренно не хочу использовать ignore) –

0

вы можете достичь этого с помощью библиотеки pyautogui, но если вам нужно сохранить несколько страниц в цикле, вы не сможете выполнять какие-либо другие задачи на экране.

import pyautogui 
import time 
pyautogui.hotkey('ctrl', 's') 
time.sleep(1) 
pyautogui.typewrite("file name") 
time.sleep(1) 
pyautogui.hotkey('enter') 
0

Это полный, рабочий пример ответа RemcoW при условии:

Вы должны сначала установить WebDriver, например,pip install selenium chromedriver_installer.

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

# core modules 
import codecs 
import os 

# 3rd party modules 
from selenium import webdriver 


def get_browser(): 
    """Get the browser (a "driver").""" 
    # find the path with 'which chromedriver' 
    path_to_chromedriver = ('/usr/local/bin/chromedriver') 
    browser = webdriver.Chrome(executable_path=path_to_chromedriver) 
    return browser 


save_path = os.path.expanduser('~') 
file_name = 'index.html' 
browser = get_browser() 

url = "https://martin-thoma.com/" 
browser.get(url) 

complete_name = os.path.join(save_path, file_name) 
file_object = codecs.open(complete_name, "w", "utf-8") 
html = browser.page_source 
file_object.write(html) 
browser.close() 
Смежные вопросы