2017-12-01 4 views
1

robobrowser와 협력하여 웹 사이트에 로그인합니다.robobrowser 이름으로 양식을 찾는 방법

내가 가진 문제는 로그인 페이지에는 두 가지 형태가 있지만 둘 다 같은 동작을하지만 이름이 다릅니다.

<form action="/login" name="changedomain"> 
... 
</form> 

두 번째 형태는 다음과 같습니다

<form action="/login" name="signin"> 
... 
</form> 

내 파이썬 코드는 다음과 같습니다

내가 사용하는 경우
import re 
from robobrowser import RoboBrowser 
browser = RoboBrowser(history=True, parser="lxml") 
browser.open("http://example.com") 
form = browser.get_form() 

문제는 :

form = browser.get_form()[1] 

은 내가 BadRequestKeyError를 얻을 수 , locat하는 방법에 대한 문서를 찾을 수 없습니다. 양식을 이름으로 작성하십시오. 유일한 문서에는 작업을 사용하는 것으로 표시되지만 양식에는 동일한 작업 특성이 있습니다. 모든 의견을 환영합니다.

+0

테스트하지 않았습니다. 'get_form'은 표준 BeautifulSoup 인자를 받아 들일 수 있습니다.'browser.get_form ({ 'name': 'signin'})' – jojo

답변

1

다음 코드를 사용하여 작업하고 있습니다.

form = browser.get_form('Form1') 

다음은 또 다른 예입니다. 양식의 html을 인쇄하십시오.

form = browser.get_forms()[1] # note the get_forms() not get_form() 

형태의 소스를 참조하는 방법의 두 번째 질문에 대한 답은 다음과 같습니다

from robobrowser import RoboBrowser 

browser = RoboBrowser(history=True, parser="html.parser") 
browser.open("https://stackoverflow.com") 
form = browser.get_form(id="search") 
print(form.parsed) 

는 두 번째 양식을 선택하는 방법의 첫 번째 대답은

<form action="/search" autocomplete="off" class="searchbar" id="search" method="get" role="search"> 
<input autocomplete="off" class="f-input js-search-field" maxlength="240" name="q" placeholder="Search…" tabindex="1" type="text" value=""/> 
<button aria-label="Search..." class="btn-topbar-primary js-search-submit" type="submit"><svg aria-hidden="true" class="svg-icon iconSearch" height="18" viewbox="0 0 18 18" width="18"><path d="M12.86 11.32L18 16.5 16.5 18l-5.18-5.14v-.35a7 7 0 1 1 1.19-1.19h.35zM7 12A5 5 0 1 0 7 2a5 5 0 0 0 0 10z"></path></svg></button> 
</form> 
+0

일단 선택하면, 내가 가지고있는 것을 확인하기 위해 선택된 폼의 소스를 프린트 할 수 있습니까? 올바른 양식? – dnraikes

+0

@dnraikes; 내 대답을 업데이트하여 '인쇄'로 표시했습니다. 내 추천은 단계 디버깅을 허용 pycharm 같은 좋은 IDE를 사용하는 것입니다. browser.open() 문을 작성하면 디버거에서 브라우저 객체를 검사 할 수 있습니다. '파싱 된'속성이 html을 표시한다는 것이 즉시 명백해집니다. – SteveJ

-2

를 산출 기본적으로 :

print(form) # this prints a dictionary of all input fields and their values from the selected form.