2011-12-19 63 views
14

Là một phần của nhiệm vụ của tôi để trở nên tốt hơn tại Python bây giờ tôi đang cố gắng đăng nhập vào một trang web tôi thường xuyên, gửi cho mình một tin nhắn, và sau đó dấu ngoài. Cho đến nay, tôi đã quản lý để đăng nhập (sử dụng urllib, cookiejar và urllib2). Tuy nhiên, tôi không thể tìm ra cách điền vào mẫu yêu cầu để gửi cho tôi một tin nhắn.Sử dụng Python để đăng nhập vào trang web, điền vào một mẫu, sau đó đăng xuất

Biểu mẫu có tại /messages.php?action=send. Có ba thứ cần được điền để gửi tin nhắn: ba trường văn bản có tên, tên và tin nhắn. Ngoài ra, có một nút gửi (có tên là "gửi").

Tôi làm cách nào để điền vào biểu mẫu này và gửi?

+0

có thể trùng lặp [Điền giá trị biểu mẫu trong trang web qua tập lệnh Python (không kiểm tra)] (http://stackoverflow.com/questions/1555234/fill-form-values-in-a-web -page-via-a-python-script-not-testing) – ravi404

Trả lời

11
import urllib 
import urllib2 

name = "name field" 
data = { 
     "name" : name 
     } 

encoded_data = urllib.urlencode(data) 
content = urllib2.urlopen("http://www.abc.com/messages.php?action=send", 
     encoded_data) 
print content.readlines() 

chỉ cần thay thế http://www.abc.com/messages.php?action=send với url nơi hình thức của bạn đang được gửi

trả lời bình luận của bạn: nếu url là url nơi hình thức của bạn có vị trí, và bạn cần phải làm điều này chỉ dành riêng cho một trang web , nhìn vào mã nguồn của trang web và tìm

<form method="POST" action="some_address.php"> 

và đặt địa chỉ này như tham số cho urllib2.urlopen

Một d bạn phải nhận ra những gì submit nút nào. Chỉ cần gửi yêu cầu Http tới url được xác định bởi action trong biểu mẫu. Vì vậy, những gì bạn làm là để mô phỏng yêu cầu này với urllib2

+0

Whoop, xin lỗi. Đó là trang có biểu mẫu. (tiếp theo trong bình luận tiếp theo nhờ iPod ngớ ngẩn của tôi) – Matthew

+0

(tiếp theo) Cảm ơn! Có vẻ như nó sẽ hoạt động. Tôi sẽ thử nó vào buổi sáng - cũng sẽ gửi biểu mẫu, hay tôi phải đặt thứ gì đó trong danh sách dữ liệu để "gửi"? – Matthew

+0

Tôi trả lời bằng cách chỉnh sửa câu trả lời –

7

Bạn muốn thư viện mechanize. Điều này cho phép bạn dễ dàng tự động hoá quá trình duyệt các trang web và gửi biểu mẫu/các liên kết sau. Trang web tôi đã liên kết có các ví dụ và tài liệu khá tốt.

+0

: D Tôi đã cài đặt nó ngay bây giờ, tôi sẽ có một trò chơi xung quanh với nó! Cảm ơn: D – Matthew

1

Cố gắng làm việc ra các yêu cầu được thực hiện (ví dụ bằng cách sử dụng công cụ phát triển web Chrome hoặc Firefox/Firebug) và bắt chước các yêu cầu POST chứa dữ liệu dạng mong muốn.

Ngoài thư viện cơ giới hóa tuyệt vời được đề cập bởi Andrew, trong trường hợp tôi cũng khuyên bạn nên sử dụng BeautifulSoup để phân tích cú pháp HTML.

Nếu bạn không muốn sử dụng cơ giới hóa nhưng vẫn muốn có một giải pháp dễ dàng, sạch sẽ để tạo yêu cầu HTTP, tôi khuyên bạn nên mô-đun excellend requests.

3

Bạn có thể sử dụng cơ giới hóa để hoạt động dễ dàng với điều này. Điều này sẽ giảm bớt công việc của bạn khi gửi biểu mẫu. Đừng quên kiểm tra các thông số như tên, tiêu đề, tin nhắn bằng cách xem mã nguồn của biểu mẫu html.

import mechanize 
br = mechanize.Browser() 
br.open("http://mywebsite.com/messages.php?action=send") 
br.select_form(nr=0) 
br.form['name'] = 'Enter your Name' 
br.form['title'] = 'Enter your Title' 
br.form['message'] = 'Enter your message' 
req = br.submit() 
Các vấn đề liên quan