2013-02-06 2 views
2

나는 mechanize (이 라이브러리를 사용한 첫 번째 경험과 거의 html과 브라우징 역학에 대해 몰라서)을 사용하여 웹 사이트에서 검색을 시도하고 있습니다.기계어로 채우기 검색 양식

사이트에 로그인하는 데는 문제가 없지만 다음 페이지에 검색 양식을 채우지 못하는 것보다 안전합니다. 내가 로그인을 위해 사용 :

>>> for i in br.forms(): 
...  print i 
...  break 
... 

저에게이 준 :

<naurp_form POST https://sd.priocom.com/fx/$sd/servlet.ru.naumen.sd.search.SearcherServlet multipart/form-data 
    <TextControl(sdsearch_ServiceCallIdSearchType=)> 
    <SubmitControl(dosearchsdsearch_ServiceCallIdSearchType=>) (readonly)> 
    <HiddenControl(hidden_dosearchsdsearch_ServiceCallIdSearchType=) (readonly)> 
    <TextControl(sdsearch_ServiceCallDescriptionSearchType=)> 
    <SubmitControl(dosearchsdsearch_ServiceCallDescriptionSearchType=>) (readonly)> 
    <HiddenControl(hidden_dosearchsdsearch_ServiceCallDescriptionSearchType=) (readonly)> 
    <HiddenControl(searchType__exists=1) (readonly)> 
    <SelectControl(searchType=[ClientTitleSearchType, *ClientTitleSearchType, CrmLiteJuridicalClientContactPersonSearchType, CrmLiteByPhoneSearchType, ServiceTitleSearchType, ContractTitleSearchType, CrmLiteNaturalClientSearchType, CrmLiteJuridicalClientSearchType, SDTaskIdSearchType, SDTaskDescriptionSearchType, SDTaskIdSearchType, ServiceCallIdSearchType, ServiceCallCommentSearchType, CoreEmployeeSearchType, CoreOUSearchType, CoreEmployeeSearchType, CoreClientSearchType, CoreContractTitleSearchType, CoreServiceSearchType, KBaseSearchType, CMDBObjectTitleSearchType, CMDBObjectInvNumberSearchType])> 
    <TextControl(searchString=)> 
    <SubmitControl(doSearch=>) (readonly)> 
    <HiddenControl(hidden_doSearch=) (readonly)> 
    <HiddenControl(searchUUID=) (readonly)> 
    <CheckboxControl(searchInResult=[on])> 
    <HiddenControl(searchInResult__exists=1) (readonly)> 
    <HiddenControl(backURL=/fx/sd/ru.naumen.sd.published_jsp?uuid=coreboqme50d80000il15pbh3tiac13s) (readonly)> 
    <SubmitControl(doClear=╨Ю╤З╨╕╤Б╤В╨╕╤В╤М ╤А╨╡╨╖╤Г╨╗╤М╤В╨░╤В╤Л) (readonly)> 
    <HiddenControl(hidden_doClear=) (readonly)> 
    <HiddenControl(__form_id=searchTab.searchForm) (readonly)> 
    <HiddenControl(first_load=true) (readonly)>> 

총 폼에

from mechanize import Browser 
    br = Browser() 
    br.open(top_url) 
    br.select_form(nr=0) 
    br["login"] = username 
    br["password"] = password 
    br.submit() 

그리고 내가 사용했던 루프 양식 필드의 이름을 볼 수 양식 수 = 3 (0,1,2) 웹 사이트와 정확히 일치하는 것. 첫 번째 양식, "sdsearch_ServiceCallIdSearchType"에 관심이 있습니다.

br.select_form(nr = 0) 
br['sdsearch_ServiceCallIdSearchType'] = '2770' 
#also tried br.form['sdsearch_ServiceCallIdSearchType'] = '2770' 
response = br.submit("dosearchsdsearch_ServiceCallIdSearchType") 
tt_page = br.response().read() 

UPD : 실제 웹 사이트에 은 내가이 노력하고있어 그래서 dosearchsdsearch_ServiceCallIdSearchType

분명, 필드와 버튼 ">>"처럼 보이는 또한 .click() 방법으로 시도를

response = br.click(type = 'submit',name = "dosearchsdsearch_ServiceCallIdSearchType") 
tt_page = br.response().read() 

하지만 아직 tt_page에서 나는 검색 양식을 채우기 위해 노력하고있는 페이지 인 첫 번째 검색 페이지를 받는다.

감사의 말씀.

PS : 웹 사이트에서 검색 양식의 코드 내가 (나는 그것이 내가 추측 할 수 무엇을 의미하는지 모르겠지만 내 생각 엔이 사실 확신 할 수 없다.)이 필요합니다

<!--formbutton.jsp--> 
<tr id="sdsearch_ServiceCallIdSearchType_outer" > 
    <th style="width:25%;"> 
     TT number 
    </th> 
    <td align="left" 
     style="width:100%;vertical-align:middle;"> 
     <table border="0" cellpadding="0" cellspacing="0"><tr><td style="border:0px"> 
     <input type="text" 
       id="sdsearch_ServiceCallIdSearchType" 
       name="sdsearch_ServiceCallIdSearchType" 
       size="30" 
       value="" 
       maxlength="254"    
       style="" 
     /> 
     </td><td style="border:0px"> 
<span id="dosearchsdsearch_ServiceCallIdSearchType_outer" 
    name="dosearchsdsearch_ServiceCallIdSearchType_outer" 
    ><input 
     onclick=" 
       mark_as_pressed(window.event, this); 
       " 
     style="margin:1px;"  
    type="submit" 
    id="dosearchsdsearch_ServiceCallIdSearchType" 
    name="dosearchsdsearch_ServiceCallIdSearchType" 
    value="&#062;" 
/></span> 
<input type="hidden" id="hidden_dosearchsdsearch_ServiceCallIdSearchType" name="hidden_dosearchsdsearch_ServiceCallIdSearchType"></td></tr></table></td> 
</tr> 

PPS : This post was helpfull 이 사이트의 게시물 중 일부도 제공합니다. 그러나 아무도 내게 왜 작동하지 않는지에 대한 조언을 해주지 못했습니다.

여전히 양식을 작성하고 다음 페이지로 이동할 수있는 방법을 찾을 수 없습니다.

+0

운 좋은 저, 그 위치에는 페이지가있다. 그래서 나는 그들을 통해 실행하고 내가 필요로하는 링크를 찾아 "follow_link"를 사용했습니다. – Keadly

답변

0
br.select_form(nr = 0) 
br['sdsearch_ServiceCallIdSearchType'] = '2770' 
br.submit() 

검색 양식을 제출하려면이 방법이 유용합니다. 로빈 내 형태를 제외하고 작업을해야했다 무엇

+0

나는 그것이 작동해야한다는 것을 안다. 그러나 그렇지 않습니다. – Keadly

0

나는 그렇지 않으면 우리가 거의 같은 것

br['sdsearch_ServiceCallIdSearchType'] = ['2770'] 

을 사용해야합니다.