2016-12-14 15 views
0

usautoforceのホームページを機械化して保存しようとしていました。@ Ertugrul答えによれば、私は完全なページを持っています。しかし、ユーザー名とパスワードのフィールドにアクセスしようとすると、エラーが発生しました。私はすでにすべての読み取り専用をfalseに設定しています。私は、ユーザー名とパスワード を参照するHTMLコードはここMechanizeの中に私のコードが存在しなかったエディタでWebページを開いたときに、ここで機械化を使用して完全なWebページにアクセスできない

br = mechanize.Browser() 


br.set_handle_equiv(True) 
br.set_handle_redirect(True) 
br.set_handle_robots(False) 
#br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
br.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'), ('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),('Upgrade-Insecure-Requests','1'),('Connection','keep-alive')] 

br.open("http://www.usautoforce.com/Pages/home.aspx") 
br.set_handle_robots(False) 
print br.response 
time.sleep(9) 

latest_index = 0 
html_replaced = "" 
html = br.response().read() 


for m in re.finditer('(href|src)(=")(/[^"]+")', html): 
    html_replaced += html[latest_index:m.start()] + m.groups()[0]+m.groups()[1] + 'http://www.usautoforce.com' + m.groups()[2] 
    latest_index = m.end() 


f=open("us.html","w") 
f.write(html_replaced) 
f.close() 

print [form for form in br.forms()][0] 

br.set_handle_robots(False) 
print br.response 
time.sleep(9) 
html = br.response().read() 

br.select_form(nr=0) 
time.sleep(2) 

#for control in br.form.controls: 
# print control 
    # print "type=%s, name=%s value=%s" % (control.type, control.name, br[control.name]) 

br.form.set_all_readonly(False) 
br.form["nexpartuname"] = "abc" 

br.form["pwd"] = "xyz" 
br.submit() 

は誤りです:

Mechanizeのは実行されません
File "haha.py", line 60, in <module> 
    br.form["nexpartuname"] = "clack" 
    File "/usr/lib/python2.7/site-packages/mechanize/_form.py", line 2775, in __setitem__ 
    control = self.find_control(name) 
    File "/usr/lib/python2.7/site-packages/mechanize/_form.py", line 3096, in find_control 
    return self._find_control(name, type, kind, id, label, predicate, nr) 
    File "/usr/lib/python2.7/site-packages/mechanize/_form.py", line 3180, in _find_control 
    raise ControlNotFoundError("no control matching "+description) 
mechanize._form.ControlNotFoundError: no control matching name 'nexpartuname' 

答えて

0

javascript。アクセスしようとしているサイトに「スクリプトを有効にしてください...」と表示されています。

機械化でjsを有効にする方法がないので、私は個人的にphantomjsを使用することをお勧めします。

しかし、ここの本当の問題はjavascriptではなく、URLです。そのウェブサイトのURLは相対的なものなので、htmlコードをダウンロードして開くだけで、期待どおりに動作しません。

すべての相対URLを絶対URLに変換する必要があります。 htmlをファイルに書き込む前にこのコードを使用してください。 html strの代わりにhtml_replaced strをファイルに書き出します。

latest_index = 0 
html_replaced = "" 

for m in re.finditer('(href|src)(=")(/[^"]+")', html): 
    html_replaced += html[latest_index:m.start()] + m.groups()[0]+m.groups()[1] + 'http://www.usautoforce.com' + m.groups()[2] 
    latest_index = m.end() 
+0

しかし、ブラウザでjavascriptを無効にした後に手作業で開こうとしたときに問題が発生しました。 – user3809411

+0

@ user3809411あなたが正しいです。本当の問題は相対URLです。更新された回答を確認してください。 –

+0

ありがとう。今働いている。 – user3809411

関連する問題