2012-01-17 12 views
5

Đây là trải nghiệm đầu tiên của tôi về lập trình bằng Python và tôi đang cố gắng đăng nhập vào this trang web. Sau khi tìm kiếm xung quanh tôi thấy rằng nhiều người đã đề xuất sử dụng mechanize. Chỉ cần chắc chắn rằng tôi thiết lập những thứ chính xác trước khi tôi nhận được mã Tôi đã tải xuống mã zip mechanize từ trang web và có tập lệnh python của tôi trong thư mục cơ giới chưa được giải nén.Sử dụng cơ giới hóa để đăng nhập vào một trang web

tôi có mã này cho đến nay sử dụng ví dụ khác nhau tôi đã tìm thấy:

import mechanize 

theurl = 'http://voyager.umeres.maine.edu/Login' 
mech = mechanize.Browser() 
mech.open(theurl) 

mech.select_form(nr=0) 
mech["userid"] = "MYUSERNAME" 
mech["password"] = "MYPASSWORD" 
results = mech.submit().read() 

f = file('test.html', 'w') 
f.write(results) 
f.close() 

Từ nhìn vào nguồn của trang web tôi tin rằng các userid/mật khẩu là tên chính xác cho biểu mẫu. Khi tôi chạy tập lệnh trong IDLE Tôi nhận được một loạt lỗi bao gồm lỗi hết thời gian và lỗi robot. Truy xuất đầy đủ: enter image description here Tôi không chắc chắn những gì tôi nên mong đợi ngay cả khi mã hoạt động. Thông tin đăng nhập dành cho email của trường tôi có thư mục lớp học. Trò chơi kết thúc của tôi cho những gì tôi đang cố gắng hoàn thành là khi tôi đăng nhập vào tài khoản của mình, tôi muốn phân tích một số thư mục để lưu trữ thông tin và lưu trữ chúng trong một tệp có thể được chuyển đổi thành nguồn cấp dữ liệu json hoặc RSS. con đường với một sự hiểu biết tốt hơn nhiều về Python chỉ cố gắng đưa ra một ý tưởng rõ ràng hơn về những gì tôi muốn thực hiện.

+0

Bạn nên cài đặt cơ giới hóa bằng 'pip'. – Acorn

+0

"Tôi nhận được một loạt lỗi bao gồm lỗi hết thời gian và lỗi robot". Không phải là rất hữu ích. Cung cấp một traceback đầy đủ. –

+0

Bạn cũng có thể cần sử dụng 'CookieJar' để lưu trữ các cookie. Nếu không, thông tin đăng nhập của bạn sẽ không ảnh hưởng đến đối tượng 'mechanize.Browser'. –

Trả lời

4

Vấn đề là Mechanize đang tôn trọng robots.txt

Bạn phải tắt tính năng này.

Giải pháp:

mech = mechanize.Browser() 
// needs to be set before you call open 
mech.set_handle_robots(False) 

Edit: nó xuất hiện rằng trang web đang sử dụng một số loại thêm giá trị POST được tạo ra thông qua Javascript. Đây có thể là một nỗi đau để tự tái tạo, kiểm tra nguồn của trang để xem điều gì đang xảy ra. Giá trị POST thực tế được gửi:

challenge [a14b1f67-11edcc01] 
charset UTF-8 
login Login 
origurl /Login/ 
password  
savedpw 0 
sha1 3f77d1e8c2ab0470ef8005a85f5f9c0d7aeedba6 
userid sdsads 
+0

Điều đó giải quyết tất cả các lỗi. Nhưng bây giờ kịch bản nằm ở đó sau khi tôi chạy nó không hiển thị bất kỳ thông tin nào. Tôi theo ấn tượng rằng nó nên viết một tập tin test.html vào thư mục nhưng không có. – Nick