pythonについての質問です。
pythonからヤフーメール等のサイトにログインする方法を教えてください。
urllib2というものを使うのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
こんにちは。
「PythonによるWebスクレイピング」(オライリージャパン)という本がありまして、
これの第9章と第10章が以下のような内容になっています。
9章 フォームとログインでクロール 9.1 Pythonリクエストライブラリ 9.2 基本フォームをサブミットする 9.3 ラジオボタン、チェックボックス、その他入力 9.4 ファイルと画像のサブミット 9.5 ログインとクッキーを扱う 9.5.1 HTTP基本アクセス認証 9.6 他のフォーム問題 10章 JavaScriptのスクレイピング 10.1 JavaScriptの簡単な紹介 10.1.1 共通JavaScriptライブラリ 10.2 Ajaxと動的 HTML 10.2.1 Seleniumを用いてPythonでJavaScriptを実行する 10.3 リダイレクトの処理 10.4 JavaScriptについての最終ノート
同著が手元にあったのでちょっとめくってみたところ、
これらの章で説明されているモジュールは以下です。
-
第9章:Requests http://jp.python-requests.org/
-
第10章:Selenium http://www.seleniumhq.org/
Requests を使ってPOSTリクエストを送る例は、以下にあります。
Selenium のほうは、Selenium Webdriverを使えば、WEBブラウザを
手で操作するのと同じようなことをプログラムから制御できるので、
習得すれば出来ることの幅は広がるかもしれません。
以上ご参考になれば幸いです。
投稿2016/10/01 13:31
総合スコア9058
0
Yahoo!メールなどのWebメールサービスはIMAPもサポートしているところが多いので、
下記のようなサイトで紹介されているように
IMAPプロトコルで接続して制御する方法もあります。
http://d.hatena.ne.jp/itasuke/20120126/p1
http://shanaikara.blogspot.jp/2016/01/pythonyahoo.html
投稿2016/10/15 13:34
総合スコア1106
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
urllib(標準ライブラリ)やrequests(サードパーティ製 pip install requests)を使う方法もありますが、この手のログインに使うと少し面倒に感じることも多いです。
例えばrequestsを使うならば、以下になるのですが
python
1import requests # pip install requests 2 3url = "https://login.yahoo.co.jp/config/login" 4data = { 5 "login": "your_id", 6 "passwd": "your_pass", 7} 8response = requests.post(url, data=data)
上では大さっぱにloginとpasswdというデータだけ送っていますが、実際には他にも送信するものがあり、
ブラウザで実際にyahooにログインすると、以下のようなデータを送っていることがわかります。
.ct: .display: .done:http://www.yahoo.co.jp .keep: .reg:https://account.edit.yahoo.co.jp/registration?src=www&done=http%3A%2F%2Fwww.yahoo.co.jp .src:www .suppreg_skip: .yby: auth_lv: card_cushion_skip: ckey: nolink: nonotice: noreg: referrer: t_cushion: .albatross:dD1ac0Y4WEImc2s9SThOa05yRE9wOGJ2ZHhWSVpQWjQxMlZ4MGVBLQ== .requiredPsCheckBox: .slogin: .tries:1 ls_autocomp: showpw_status: login:ユーザ名! passwd:パスワード! .persistent:y ... ... ...
上記の実際に送っているもののいくつかは必要ないのですが、必須なものもあります。
どれが必須か?等と調べるのは中々に面倒ですし、動的に値を変えるものもあります。
ですので、このような場合は「selenium」を使いブラウザでの動きを自動化すると楽です。あくまでブラウザからやり取りを行ってくれるため、気にすることは減ります。
(requestsやurllib等で直接HTTPのやり取りを行うよりは、低速になってしまいますが...)
python
1from selenium import webdriver # pip install selenium 2 3LOGIN_URL = "https://login.yahoo.co.jp" 4ID = "ここにIDを入れる" 5PASSWORD = "ここにパスワード" 6 7# ブラウザの立ち上げとログイン画面を開く 8driver = webdriver.Firefox() 9driver.get(LOGIN_URL) 10 11# IDの入力 12yahoo_id = driver.find_element_by_id("username") 13yahoo_id.send_keys(ID) 14 15# パスワードの入力 16password = driver.find_element_by_id("passwd") 17password.send_keys(PASSWORD) 18 19# ログインボタンの押下と、その前後のスクリーンショット 20driver.save_screenshot("before_login.png") 21driver.find_element_by_id(".save").click() 22driver.save_screenshot("after_login.png") 23 24driver.quit()
試したところ、上のコードも文字認証してください、というページに飛ばされたので
実際はもう少し工夫する必要がありそうです。
ですが、イメージとしてはこのような感じになるかと思います。
投稿2016/10/02 01:19
総合スコア972
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。