2010-03-30 45 views
6

im tạo một số tập lệnh với mô-đun mechanize.browser.python mechanize.browser submit() vấn đề liên quan

một trong những vấn đề là tất cả các điều khác là ok, nhưng khi nộp() hình thức, nó không làm việc,

vì vậy tôi đã tìm thấy một số phần nguồn nghi ngờ.

trong nguồn html tôi đã được tìm thấy như sau.

<form method="post" onsubmit="return loginCheck(this)" name="FRMLOGIN"/> 

suy nghĩ, đăng nhậpKiểm tra (điều này) gây ra sự cố khi gửi biểu mẫu.

nhưng cách xử lý loại chức năng javascript này với mô-đun cơ giới hóa, vì vậy tôi có thể

gửi biểu mẫu thành công và có thể nhận kết quả?

folloing là nguồn tập lệnh hiện tại của tôi.

nếu có ai có thể giúp tôi .. rất biết ơn !!

# -*- coding: cp949-*- 
import sys,os 
import mechanize, urllib 
import cookielib 
from BeautifulSoup import BeautifulSoup,BeautifulStoneSoup,Tag 
import datetime, time, socket 
import re,sys,os,mechanize,urllib,time 


br = mechanize.Browser() 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 

# Browser options 
br.set_handle_equiv(True) 
br.set_handle_gzip(True) 
br.set_handle_redirect(True) 
br.set_handle_referer(True) 
br.set_handle_robots(False) 

# Follows refresh 0 but not hangs on refresh > 0 
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 

# Want debugging messages? 
br.set_debug_http(True) 
br.set_debug_redirects(True) 
br.set_debug_responses(True) 

# User-Agent (this is cheating, ok?) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6')] 
br.open('http://user.buddybuddy.co.kr/Login/LoginForm.asp?URL=') 
html = br.response().read() 
print html 

br.select_form(name='FRMLOGIN') 
print br.viewing_html() 
br.form['ID']='zero1zero2' 
br.form['PWD']='012045' 
br.submit() 

print br.response().read() 

Trả lời

1

bạn sẽ cần phải sử dụng mô-đun không bị mờ DOMForm và Spidermonkey (http://pypi.python.org/pypi/python-spidermonkey) để xử lý javascript. Hoặc bạn tìm ra những gì loginCheck() đang làm và thực hiện công việc của nó trước khi gửi biểu mẫu trong python. Nếu loginCheck() chỉ kiểm tra tính hợp lệ rõ ràng của dữ liệu đăng nhập, điều đó sẽ khá dễ dàng. Xin lưu ý rằng thông số hành động của thẻ biểu mẫu đã nêu bị thiếu. Nó có thể được đưa ra trong phần javascript.

Tùy thuộc vào những gì bạn dự định có thể dễ dàng hơn khi làm việc với chỉ urllib2. Bạn có thể giả định một sự xuất hiện tĩnh của trang web đó và chỉ đăng dữ liệu với các phương thức của urllib2 và nhận được kết quả với nó.

+0

cảm ơn tôi sẽ cố gắng :) – paul

1

onsubmit chỉ là bỏ qua bởi cơ giới hóa, không giải thích javascript được thực hiện.
Bạn cần xác minh thông tin đăng nhập nào(); trong một số trường hợp hạn chế (Validation), bạn có thể lập trình javascript.

+0

xin cảm ơn ... nếu bạn biết một số ví dụ, bạn có thể cho tôi biết một số ví dụ không? nếu như vậy nó tốt tham khảo cho tôi! cảm ơn – paul

+0

Nhìn vào loginCheck, nó làm gì? – systempuntoout

+0

Hành động "https://user.buddybuddy.co.kr/Login/Login.asp" được đưa ra bởi javascript.Tôi xin lỗi nhưng bạn không thể sử dụng cơ giới hóa trong trường hợp này. – systempuntoout

2

việc cơ giới hóa không hỗ trợ Javascript. Nếu bạn hoàn toàn phải chạy Javascript đó, hãy nhìn vào Selenium. Nó cung cấp các ràng buộc python để kiểm soát một trình duyệt đang chạy, thực như Firefox hoặc IE.

Các vấn đề liên quan