HTML 민첩성 팩 - 텍스트 내용과 일치하는 옵션 태그 값 가져 오기

bots c# html-agility-pack

문제

웹 사이트에 Html Agility Pack을 사용하여 자동화 응용 프로그램을 만들고 있습니다. 웹 사이트의 각 제품에는 크기가 다른 HTML 코드가 있으며 제품에서 해당 코드를 가져 오려고합니다.

이것은 웹 사이트 및 예제 제품입니다 : 여기를 클릭하십시오.

다음은 현재 코드입니다.

var webGet = new HtmlWeb();
var doc = webGet.Load(txtLink.Text);

HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//*[contains(@id,'size')]");
foreach (var node in collection)
{
var Size = node.InnerHtml.ToString();
txtLog.Text += Environment.NewLine + Size;
}

예제 제품에 대한 응답은 다음과 같습니다.

<option value="33455">Small
<option value="33456">Medium
<option value="33457">Large
<option value="33458">XLarge

웹 사이트를 확인하고 싶지 않은 경우 HTML 코드가 항목에 대해 어떻게 표시되는지 확인하십시오.

<select name="size" id="size"><option value="33455">Small</option>
<option value="33456">Medium</option>
<option value="33457">Large</option>
<option value="33458">XLarge</option>
</select>

내가 원하는 일 :

항목에 대한 제품 링크를 입력하고 크기를 선택합니다. 선택한 크기가 발견되면 해당 크기의 크기 코드 만 반환하십시오. 예를 들어 예제 항목을 사용하고 응용 프로그램이 33456을 반환해야하므로 보통을 선택합니다.

수락 된 답변

LINQ 및 대 / 소문자를 구분하지 않는 일치를 사용하여이 작업을 수행하는 한 가지 방법은 다음과 같습니다.

var size = "xlarge";
var option = document
    .GetElementbyId("size")
    .ChildNodes
    .Where(x => x.Name == "option"
        && x.NextSibling.InnerText
            .IndexOf(size, StringComparison.OrdinalIgnoreCase) != -1)
    .FirstOrDefault();

var result = option != null 
    ? option.Attributes["value"].Value
    : "not found";
Console.WriteLine("{0}: {1}", size, result);


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.