質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

解決済

1回答

7250閲覧

ログインが必要なサイトからあるファイルをダウンロードしたい

shun_kuwa

総合スコア187

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

0グッド

0クリップ

投稿2018/08/13 15:06

前提・実現したいこと

サイボウズ社のクラウド型グループウェア「サイボウズ Office」を利用しています。
バックアップ機能が存在しないため、定期的に自動でバックアップをとりたいのですが、
バックアップ操作のためにはログインが必要です。

PowershellかPython、もしくはC#のバッチ処理等でHttpClientを生成し、
上記サイトへログインしたあとファイルをダウンロードする処理を実装したいのですが、
Http通信の知識が乏しくうまくいっていません。

実装方法は問いませんので、ファイルのダウンロードができる方法を教えていただけないでしょうか。

試しにPythonによる実装を行ってみたソースコード

Python

1import requests 2from bs4 import BeautifulSoup 3from urllib.parse import urljoin 4 5# メールアドレスとパスワードの指定 6USER = 'user' 7PASS = 'pass' 8 9# セッションを開始 10session = requests.session() 11 12# ログイン 13login_info = { 14 'username':USER, 15 'password':PASS 16} 17 18# action 19url_login = 'https://XXXX.cybozu.com/login' 20res = session.post(url_login, data=login_info) 21res.raise_for_status() # エラーならここで例外を発生させる 22 23res2 = session.get('https://XXXX.cybozu.com/o/ag.cgi/871.dbmz?page=DBFileDBM&did=871&ct=1&LNAME=1&DBMX=&&ext=.dbmz')

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mix-peach

2018/08/14 08:42

PowershellもPythonもC#もサイボウズも詳しくないんですけども・・・提供されているAPIを使うのでは無理なのですか? https://products.cybozu.co.jp/api/
shun_kuwa

2018/08/15 01:01

ご指摘ありがとうございます。APIでは実現できない操作(具体的には、カスタムアプリという機能のデータダウンロード)を行ないたいので、自前で実装するしかないと思っています。
guest

回答1

0

自己解決

試行錯誤の結果、少しやり方は変えましたが自己解決いたしました。

##実現方法
Seleniumを使用し、headlessでChromeを立ち上げてフォームにID/Passを入力し、ログイン後にダウンロードする方法をとりました。

Python

1import shutil 2import time 3from datetime import datetime 4 5from selenium import webdriver 6from selenium.webdriver.chrome.options import Options 7 8options = Options() 9options.binary_location = r'C:\Users\XXXXX\AppData\Local\Google\Chrome SxS\Application\chrome.exe' 10options.add_argument('--headless') 11 12driver = webdriver.Chrome(chrome_options=options) 13driver.get('https://XXXXX.cybozu.com/') 14 15# ID/PASSを入力 16# TODO:設定ファイルから読み込むよう修正 17id = driver.find_element_by_name('username') 18id.send_keys('***') 19password = driver.find_element_by_name('password') 20password.send_keys('***') 21time.sleep(1) 22 23# ログインボタンをクリック 24login_button = driver.find_element_by_class_name("login-button") 25login_button.click() 26 27time.sleep(3) 28 29# ダウンロード用のURLをGET 30driver.get('https://XXXXX.cybozu.com/o/ag.cgi/871.dbmz?page=DBFileDBM&did=871&ct=1&LNAME=1&DBMX=&&ext=.dbmz') 31driver.command_executor._commands["send_command"] = ( 32 "POST", 33 '/session/$sessionId/chromium/send_command' 34) 35params = { 36 'cmd': 'Page.setDownloadBehavior', 37 'params': { 38 'behavior': 'allow', 39 'downloadPath': r'D:\temp' 40 } 41} 42driver.execute("send_command", params=params) 43time.sleep(10) 44 45driver.quit()

かなり手探りでの実装になりまたPythonでソースを書くのはこれが初めてだったので、なにかあればご指摘いただけると幸いです。

投稿2018/08/20 09:53

shun_kuwa

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問