2011-02-13 2 views
3

A previous question은 다음 코드의 fldnil임을 보여줍니다.내 코드가 mail.com에서 로그인 양식 필드를 찾지 못하는 이유는 무엇입니까?

procedure TForm1.Button2Click(Sender: TObject); 
var 
    doc: IHTMLDocument2; 
    frm: IHTMLFormElement; 
    fld: IHTMLInputTextElement; 
begin 
    doc := webbrowser1.Document as IHTMLDocument2; 
    frm := doc.forms.item(0, EmptyParam) as IHTMLFormElement; 
    fld := frm.item('login', EmptyParam) as IHTMLInputTextElement; 

나는 mail.com에가는 TWebBrowser를하고 난 이유 frm.item 반환 nil을 궁금해하고있다. 그것은 내가 필드를 채울 수 없게 만든다. 다른 웹 사이트 (예 : gmail.com)에서 '로그인'대신 '이메일'을 입력하면 작동합니다.

페이지의 HTML에서 찾을 수 있기 때문에 필드의 이름이 '로그인'이라고 확신합니다 : <input type="text" name="login" id="login" class="text" ...>.

답변

3

나는 내 자신에 대한 대답을 믿는다. 그래서 바보 같은 질문은 꽤 솔직하다. 0을 2로 바꾸면 페이지에 여러 양식이 있고 특정 필드 '로그인'이 html 페이지의 양식 2에 있기 때문에

+0

이 대답을 받아 들여야합니다. –

+1

은 2 일, 그러나 thx – dave123

+1

* 양식 * 검색을 건너 뛸 수 있습니다. ID가 * login * 인 항목을 검색하면됩니다. 'id' 속성은 페이지에서 유일하다는 것을 보장합니다. 그래서 당신이 필요로하는 입력 필드의 ID라면, 페이지에 몇 개의 다른 폼이 있는지에 관계없이 직접 얻을 수 있습니다. 그게 [GolezTrol의 대답] (http://stackoverflow.com/questions/4985373/finding-which-form-the-input-field-belongs-to-delphi/4985395#4985395)에서 ['IHTMLDocument3 :: getElementFromID'] (http://msdn.microsoft.com/en-us/library/aa752543.aspx). –

관련 문제