1

私は自分の仕事がより速く進むのを助けるために小さなプロジェクトをやっています。私は現在、Python 3.2で書かれたプログラムを持っており、1つの例外を除いて、ほとんどすべての手作業を実行します。会社のWebサイト(ユーザー名とパスワード)にログオンし、月と年を選択して[ダウンロード]をクリックする必要があります。それを行うための小さなプログラムを作成して、プロセス全体がプログラムによって完全に実行されるようにしたいと思います。

調べてみましたが、2.X用のツールしか見つかりません。urllibを調べたところ、2.Xモジュールの一部がurllib.requestに含まれていることがわかりました。

私はそれを始めるためのいくつかのコードさえ見つけました、しかし私はそれをどのように実践するかについて混乱しています。

これが私が見つけたものです:

import urllib2

theurl = 'http://www.someserver.com/toplevelurl/somepage.htm'

username = 'johnny'
password = 'XXXXXX'
# a great password

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
# this creates a password manager
passman.add_password(None, theurl, username, password)
# because we have put None at the start it will always
# use this username/password combination for  urls
# for which `theurl` is a super-url

authhandler = urllib2.HTTPBasicAuthHandler(passman)
# create the AuthHandler

opener = urllib2.build_opener(authhandler)

urllib2.install_opener(opener)
# All calls to urllib2.urlopen will now use our handler
# Make sure not to include the protocol in with the URL, or
# HTTPPasswordMgrWithDefaultRealm will be very confused.
# You must (of course) use it when fetching the page though.

pagehandle = urllib2.urlopen(theurl)
# authentication is now handled automatically for us

Michael Foordと彼のページへのすべてのクレジット:基本認証

そこで、コードを少し変更して、すべての「urllib2」を「urllib.request」に置き換えました。

次に、Webページを開く方法を学び、プログラムがWebページを開く必要があることを理解し、ログインとパスワードのデータを使用してページを開き、そこからファイルをダウンロードする方法を学びます。

ie = webbrowser.get('c:\\program files\\internet explorer\\iexplore.exe')
ie.open(theurl)

(Explorerはゴミだと知っています。テストに使用するだけで、cromeを使用します;))

ただし、ログインデータが入力されたページは開きません。URLを入力したかのようにページが開きます。

パスワードハンドルを使用してページを開くにはどうすればよいですか?マイケルがどのようにそれらを作ったかはある程度理解していますが、実際にWebサイトを開くためにどちらを使用するかはわかりません。

また、後から考えて、Cookieを調べる必要がありますか?

御時間ありがとうございます

4

4 に答える 4

2

ここで混乱します。 webbrowserは、実際の Web ブラウザのラッパーでありurllib、http および URL 関連のもののライブラリです。彼らはお互いを知らず、非常に異なる目的を果たします。

以前の IE バージョンでは、HTTP Basic Auth のユーザー名とパスワードを次のように URL にエンコードできました http(s)://Username:Password@Server/Ressource.ext私たち

実際のブラウザーを開くだけでなく、ブラウザーをエミュレートしたい場合は、http : //wwwsearch.sourceforge.net/mechanize/ をご覧ください。mechanize

于 2012-05-14T15:19:26.380 に答える
1

ブラウザは、Python で行った認証について何も知りません (ブラウザがゴミであるかどうかにかかわらず、それは何の関係もありません)。このwebbrowserモジュールは、ブラウザーを起動して Web ブラウザーを指すための便利なメソッドを提供するだけです。資格情報をブラウザに「転送」することはできません。

python2 から python3 への移行に関して: この2to3ツールは、あなたのような単純なスクリプトを自動的に変換できます。

于 2012-05-14T15:05:30.867 に答える
0

私はセレンを使用します。これは、アイデアを提供するために少しハッキングした小さなスクリプトのコードです。

def get_name():
user = 'johnny'
passwd = 'XXXXXX'
try : 

    driver = webdriver.Remote(desired_capabilities=webdriver.DesiredCapabilities.HTMLUNIT)
    driver.get('http://www.someserver.com/toplevelurl/somepage.htm')
    assert 'Page Title' in driver.title
    username = driver.find_element_by_name('name_of_userid_box')
    username.send_keys(user)
    password = driver.find_element_by_name('name_of_password_box')
    password.send_keys(passwd)
    submit = driver.find_element_by_name('name_of_login_button')
    submit.click()
    driver.get('http://www.someserver.com/toplevelurl/page_with_download_button.htm')
    assert 'page_with_download_button title' in driver.title
    download = driver.find_element_by_name('download_button')
    download.click()
except :

    print('process failed')

私はPythonを初めて使用するので、これはすべての記述で最高のコードではないかもしれませんが、一般的なアイデアを提供するはずです.

それが役に立てば幸い

于 2013-08-14T12:17:35.267 に答える
0

それらは同じ環境で実行されていません。

ダウンロードボタンをクリックしたときに実際に何が起こったのかを理解する必要があります。ブラウザーの開発ツールを使用して、Web サイトが使用している POST 形式を取得します。次に、Python でリクエストを作成してファイルをフェッチします。

Requestsは、そのようなことをはるかに簡単に行うための優れたライブラリです。

于 2012-05-14T15:06:58.450 に答える