Html Agility Pack无法使用xpath查找列表选项

这与我之前的问题有关 ,但似乎我有另一个案例,其中Html Agility Pack无法按预期工作。

这是Html(删除了必需品,删除了敏感信息):

  Frarma Express Maderas Garcia Miaris, SA Ricoh Panama UNO EXPRESS Garrett Blaser Gretsch Oriel Antonio Grau   

这是代码:

 const string xpath = "//*[contains(@id, 'one-time-payment-form:vendor-select-')]/option[contains(text(), 'UNO EXPRESS')]"; var driver = new FirefoxDriver(new FirefoxProfile()) { Url = "PATH_TO_FILE_CONTAINING_HTML_SHOWN_ABOVE" }; Thread.Sleep(2000); //Can WebDriver find it? var e = driver.FindElementByXPath(xpath); Console.WriteLine(e!=null ? "WebDriver success" : "WebDriver failure"); //Can Html Agility Pack find it? var source = driver.PageSource; var htmlDoc = new HtmlDocument { OptionFixNestedTags = true }; HtmlNode.ElementsFlags.Remove("form"); htmlDoc.LoadHtml(source); var nodes = htmlDoc.DocumentNode.SelectNodes(xpath); Console.WriteLine(nodes!=null ? "Html Agility Pack success" : "Html Agility Pack failure"); driver.Quit(); 

当我运行代码时,控制台显示:

 WebDriver success Html Agility Pack failure 

很明显,WebDriver找到项目@XPath //*[contains(@id, 'one-time-payment-form:vendor-select-')]/option[contains(text(), 'UNO EXPRESS')] @ id //*[contains(@id, 'one-time-payment-form:vendor-select-')]/option[contains(text(), 'UNO EXPRESS')] ,但Html Agility Pack不能。

有任何想法吗?

这是“按设计”。 这与OPTION和FORM的想法相同。 由于Html Agility Pack的历史原因,某些标签的处理方式不同。 当时在HTML 3.2时代,OPTION并不总是关闭,而在HTML 3.2中,它并不是必需的。

尝试添加此:

 HtmlNode.ElementsFlags.Remove("option");