2016-09-07 6 views
0

웹 페이지의 일부가 클릭되었을 때 웹 페이지의 다양한 속성을 분석하는 코드가 있습니다. 선택되는 요소 중 하나는 클릭 된 요소의 ID입니다.html 웹 페이지의 레이블 요소에서 "for"속성 추출

때때로 ID가없고 클릭하는 요소는 "for"속성을 사용하여 ID를 참조하는 레이블입니다. 이 경우 "for"속성 값을 선택하려고합니다.

나는 다음과 같이이 작업을 수행하려고했습니다 : 어떤 이유로 .GetAttribute("for")를 들어

txtID.Text = TryCast(myHTMLDocument, HtmlDocument).GetElementFromPoint(lastMousePos).GetAttribute("id") 
If txtID.Text = "" Then 
    txtID.Text = TryCast(myHTMLDocument, HtmlDocument).GetElementFromPoint(lastMousePos).GetAttribute("for") 
End If 

은 항상 빈 반환합니다. 나는이 속성을 잘못 참조하고 있는가? 아니면 계속 진행되고있다. 아래

HTML 예 :

<div class="question legal-owner active"> 

<a class="help-trigger help-trigger-layout"> 
    <span class="help-text-icon"></span> 
</a> 


<div class="quote-help quote-help-layout"> 
    <a class="quote-help-close-container"> 
     <div class="quote-help-close"></div> 
    </a> 
    <h3>Car ownership</h3> 

    <p> 
     We need to know whether the car belongs to you. If you don’t own the car but you’re the registered keeper, you should answer ‘No’ 
     (the owner of the car and the registered keeper can be different people). 
    </p> 

</div> 

<span class="editor-label question-layout"> 
    <label for="OwningAndUsingCarPanel_LegalOwner">Are you (or will you be) the legal owner of this car?</label> 
</span> 
    <ul class="question-layout yesno-radio-list"> 
     <li> 
      <input name="OwningAndUsingCarPanel.LegalOwner" id="OwningAndUsingCarPanel_LegalOwner_true" type="radio" value="True"> 
      <label for="OwningAndUsingCarPanel_LegalOwner_true"> 
       <span>Yes</span> 
      </label> 
     </li> 
     <li> 
      <input name="OwningAndUsingCarPanel.LegalOwner" id="OwningAndUsingCarPanel_LegalOwner_false" type="radio" value="False"> 
      <label for="OwningAndUsingCarPanel_LegalOwner_false"> 
       <span>No</span> 
      </label> 
     </li> 
    </ul> 
<span class="editor-validation"> 
    <span class="field-validation-valid" id="OwningAndUsingCarPanel_LegalOwner_validationMessage"></span> 
</span> 
</div> 
+0

이 우리에게 HTML 샘플을 보여주십시오 다음과 같이 내 원래의 질문의 맥락에서

Private Function getUnknown(myText As String, myAttr As String) Dim myResult As String = "" Dim myStart As Integer = 0 Dim myLen As Integer = 0 'remove any spaces around the "=" sign Dim myCleanText As String = Regex.Replace(myText, "\s+([=])\s+|\s+([=])|([=])\s+", "=") 'add =" to the attribute to avoid finding non-attributes when using IndexOf function Dim myFullAttr As String = myAttr.Trim().ToLower + "=""" Try myStart = myCleanText.ToLower().IndexOf(myFullAttr) If myStart = -1 Then myResult = "Nothing Found" Else myStart = myStart + myFullAttr.Length myLen = myCleanText.IndexOf("""", myStart) - myStart myResult = myCleanText.Substring(myStart, myLen) End If Catch ex As Exception myResult = "Nothing Found" End Try Return myResult End Function 

나는 이것을 사용하고 있습니다. –

+0

HTML 예제 지금 원래 질문에 추가되었습니다. –

+0

'HtmlDocument'에 익숙하지 않지만 GetElementFromPoint()에 대한 MSDN 문서를 기반으로하면 ''요소 만보고 'for' 속성은'

답변

0

나는 태그 내에 속성을 검색 getUnknown라고 내 자신의 기능을 만들어이 문제를 해결했다. 값이 큰 따옴표로 묶인 모든 속성에 대해 작동해야합니다. 이 함수는 2 개의 인수를 가지며, 첫 번째는 속성 및 값으로 완성 된 요소 태그를 포함해야하는 문자열이고 두 번째는 값을 추출하려는 속성입니다.

Dim myElement As String = _ 
TryCast(myHTMLDocument, HtmlDocument).GetElementFromPoint(lastMousePos).OuterHtml.ToString 

txtID.Text = getUnknown(myElement, "for")