기계화 된 여러 웹 사이트에서 양식을 제출하고 싶습니다. 일반적으로 양식 이름이나 양식 ID를 정확히 알 수는 없지만 제출하려는 입력 이름을 알고 있습니다.모든 양식을 반복하면서 올바른 양식을 선택하십시오.
내부에 몇 개의 양식이있는 웹 사이트가 있다고 가정 해 보겠습니다. 내 코드는 모든 양식을 검사해야하며, 그 중 하나에 "email"이라는 입력 값이 있으면 양식을 제출합니다. 여러 양식에있는 경우 양식을 모두 제출합니다.
내가 테스트하는 웹 사이트에는 두 가지 형식이 있습니다. 그 중 하나는 로그인 양식이고, 다른 하나는 가입 양식입니다. 둘 다 "전자 메일"입력 값을가집니다. 그래서 내 코드는 두 가지 형식을 모두 제출해야합니다.
는이 코드 블록과 그것을 달성하기 위해 노력하고있어 :
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
이 코드를 인쇄이 성공 메시지, 그러나 그것은 구독 아니다. 다음 코드는 양식 이름을 설정했기 때문에 가입 양식 제출과 함께 작동합니다.
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()
첫 번째 코드의 문제점은 무엇입니까? 양식을 모두 선택하고 값을 제출하려면 어떻게합니까? 아마도 문제는 해당 양식 선택 부분입니다 :
br.select_form(nr=0)
편집 : Wireshark로 POST 요청을 확인했습니다. 첫 번째 양식이 2 번 채워진 것 같습니다. nr=0
을 nr=1
으로 변경하면 올바른 양식이 두 번째 양식이기 때문에 작동합니다.
당신은 이것을 위해 Mechanize를 사용하고 있음을 분명히해야합니다. 처음 몇 단락은 혼란 스럽습니다. 왜냐하면 99 %의 시간이 웹 브라우저의 컨텍스트에서 이루어지기 때문입니다. – borfast