2009-10-12 5 views
21

ターゲットページにフォーム値を入力し、Pythonでボタンをクリックする必要があります。私はSeleniumとWindmillを見てきましたが、これらはテストフレームワークです。テストはしていません。私はプログラムで第三者のウェブサイトにログインしようとしており、データベースに挿入する必要があるファイルをダウンロードして解析します。テストフレームワークの問題は、ブラウザのインス​​タンスを起動することです。私は、私が望むページを検索するために毎日実行するようにスケジュールすることができるスクリプトがほしいだけです。これを行う方法は?あなたがサンプルを提出MechanizePythonスクリプト(テストではありません)を介してWebページにフォーム値を入力してください

フォームを探している

答えて

21

import re 
from mechanize import Browser 

br = Browser() 
br.open("http://www.example.com/") 
br.select_form(name="order") 
# Browser passes through unknown attributes (including methods) 
# to the selected HTMLForm (from ClientForm). 
br["cheeses"] = ["mozzarella", "caerphilly"] # (the method here is __setitem__) 
response = br.submit() # submit current form 
+0

を、私は、しかしPythonの2.6を使用してこだわっているので、悲しいことにMechanizeのは、いずれかのオプションではありません。 (GopherErrorは2.6で落としたように見える)。 – Habaabiai

+0

機械化されたドキュメントは、通常少し軽いですが、実際には本当に素晴らしいです! –

+0

私はあなたが主張するべきだと思う、ゴーファーの問題をデバッグしてみてください。 Python 2.6では、gopherサポートがIIRCから削除されました。あなたの問題を修正することは、おそらくimport gopherlibとgopherが実際に使用されるいくつかの箇所についてコメントすることです。 –

3

あなたはそうのようにこれを行うには、標準urllibライブラリを使用することができます。

import urllib 

urllib.urlretrieve("http://www.google.com/", "somefile.html", lambda x,y,z:0, urllib.urlencode({"username": "xxx", "password": "pass"})) 
1

Mechanizeの例を示唆しているようです働くフォームを送信した後、一部のコンテンツが生成されている場合は、検索エンジンで、あなたはそれを得るよう経由して、

br["kw"] = "rowling" # (the method here is __setitem__) 

print response.read() 
12

あり、あなたがテキストを入力する必要があります入力フィールドでは、のようなものを使用A Mechanizeのを使用して、この例に見て:それは基本的なアイデアを与えるだろう。

#!/usr/bin/python 
import re 
from mechanize import Browser 
br = Browser() 

# Ignore robots.txt 
br.set_handle_robots(False) 
# Google demands a user-agent that isn't a robot 
br.addheaders = [('User-agent', 'Firefox')] 

# Retrieve the Google home page, saving the response 
br.open("http://google.com") 

# Select the search box and search for 'foo' 
br.select_form('f') 
br.form[ 'q' ] = 'foo' 

# Get the search results 
br.submit() 

# Find the link to foofighters.com; why did we run a search? 
resp = None 
for link in br.links(): 
    siteMatch = re.compile('www.foofighters.com').search(link.url) 
    if siteMatch: 
     resp = br.follow_link(link) 
     break 

# Print the site 
content = resp.get_data() 
print content 
関連する問題