Selenium
のPython
を使用してMacOS Firefox
にWebページを保存しようとしています。
これまでのところ、COMMAND + S
をクリックしてSAVE AS window
をポップアップすることができました。しかしながら、
次の方法がわかりません。
誰か助けてもらえますか?
以下は、COMMAND + S
をクリックするために使用するコードです。
ActionChains(browser).key_down(Keys.COMMAND).send_keys("s").key_up(Keys.COMMAND).perform()
さらに、この方法を使用する理由は、私がnicode Encode Errorに遭遇するためです。
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'コーデックは位置1の文字u '\ xf8'をエンコードできません:序数が範囲外です(128)
with open('page.html', 'w') as f:
f.write(driver.page_source)
あなたが達成しようとしていることは、Seleniumでは不可能です。開くダイアログは、Seleniumが操作できるものではありません。
あなたができる近いことは、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)
Webサイト全体を保存する必要がある場合は、AutoITなどのツールの使用を検討してください。これにより、保存ダイアログを操作できるようになります。
ファイルの保存ダイアログなどのシステムダイアログを操作することはできません。ページのhtmlを保存したい場合は、次のようにします。
page = driver.page_source
file_ = open('page.html', 'w')
file_.write(page)
file_.close()
これは、RemcoWが提供する回答の完全で実用的な例です。
最初にWebドライバーをインストールする必要があります。 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()
これはpyautoguiライブラリで実現できますが、複数のページをループで保存する必要がある場合、画面上で他のタスクを実行することはできません。
import pyautogui
import time
pyautogui.hotkey('ctrl', 's')
time.sleep(1)
pyautogui.typewrite("file name")
time.sleep(1)
pyautogui.hotkey('enter')