Tôi muốn gửi biểu mẫu ở nhiều trang web với cơ giới hóa. Thông thường tôi không thể biết chính xác tên của biểu mẫu hoặc id biểu mẫu, nhưng tôi biết tên đầu vào mà tôi muốn gửi.chọn đúng biểu mẫu trong khi lặp lại tất cả các biểu mẫu
Giả sử có một trang web có vài biểu mẫu bên trong. Mã của tôi nên kiểm tra tất cả các biểu mẫu, nếu một trong số chúng có giá trị đầu vào có tên là "email", nó sẽ gửi biểu mẫu đó. Nếu có nhiều biểu mẫu, nó sẽ gửi tất cả.
Trang web tôi đang thử nghiệm có hai biểu mẫu. Một trong số đó là biểu mẫu đăng nhập, biểu mẫu còn lại là biểu mẫu đăng ký. Cả hai đều có giá trị đầu vào "email". Vì vậy, mã của tôi nên gửi cả hai biểu mẫu.
Tôi đang cố gắng để đạt được nó với khối mã này:
for forms in br.forms():
if not forms.find_control(name="email"):
continue
br.select_form(nr=0)
br.form["email"] = email
br.submit()
print "Success: ", link
Mã này in hai thông điệp thành công, tuy nhiên đó không phải đăng ký cao. Mã sau đây hoạt động với việc gửi biểu mẫu đăng ký vì tôi đặt tên biểu mẫu:
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6')]
br.open("http://example.com")
br.select_form("subscribe")
br.form["email"] = email
br.submit()
Vì vậy, mã đầu tiên có vấn đề gì? Làm cách nào tôi có thể chọn cả hai biểu mẫu và gửi giá trị? Có thể vấn đề là với phần lựa chọn hình thức đó:
br.select_form(nr=0)
Chỉnh sửa: Tôi đã kiểm tra yêu cầu POST bằng Wireshark. Có vẻ như nó điền vào biểu mẫu đầu tiên trong 2 lần. Khi tôi thay đổi nr=0
với nr=1
nó hoạt động vì biểu mẫu chính xác là biểu mẫu thứ hai.
Bạn nên làm rõ rằng bạn đang sử dụng Cơ chế cho việc này. Một vài đoạn đầu tiên của câu hỏi của bạn gây nhầm lẫn vì 99% thời gian bạn mô tả sẽ có trong ngữ cảnh của một trình duyệt web. – borfast