浏览器给出的 xPath 错误或 HTMLAgilityPack 无法使用 xPath?
xPath is wrong given by the Browser or HTMLAgilityPack cannot use xPath?
我正在尝试从 Google 翻译中获取所有语言。当我打开开发人员工具并在弹出所有语言时单击其中一种语言(单击箭头时),它为阿拉伯语提供 //*[@id=':7']/div/text()
,但当我尝试获取节点时它为 returns null:
async Task AddLanguages()
{
try
{
// //*[@id=":6"]/div/text()
HtmlDocument document = new HtmlDocument();
document.LoadHtml(html);
for (int i = 6; i <= 9; i++)
{
//*[@id=":6"]/div/text() //*[@id=":6"]/div/div
Debug.WriteLine(i);
var element = document.DocumentNode.SelectSingleNode("//*[@id=':7']/div/text()");
Trace.WriteLine(element == null, "Element is null");
}
}
catch (Exception e)
{
this.ShowMessageAsync("Hata!", "Dilleri yüklerken hata ortaya çıktı.");
}
}
Element is null: True
始终输出(我试图使用 for 循环遍历语言,但是,它甚至对单个语言都不起作用!)
因为我还不能发表评论...你有没有试过在寻找元素之前先点击dropdwon?
单击 //*[@id='gt-sl-gms'] 或其内部 div 将使元素可见..
那应该有用..
无论如何,我无法让 $x 在 google chrome 的控制台上工作。我目前收到未捕获的类型错误。不确定这是否与任何事情有关..
编辑:哦等等,我想我知道你的问题..仔细检查元素后,元素 (div) 似乎在文本之前还有另一个 div。所以试试 /*[@id=':7']/div/text()[2]
我猜你的xpath是错误的。您可以尝试类似的操作:
string Url = "https://translate.google.com/";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(Url);
var arabic = doc.DocumentNode.Descendants("div").FirstOrDefault(_ => _.ChildNodes.Any(node => node.Name.Equals("#text") && node.InnerText.Equals("Arabic")));
我正在尝试从 Google 翻译中获取所有语言。当我打开开发人员工具并在弹出所有语言时单击其中一种语言(单击箭头时),它为阿拉伯语提供 //*[@id=':7']/div/text()
,但当我尝试获取节点时它为 returns null:
async Task AddLanguages()
{
try
{
// //*[@id=":6"]/div/text()
HtmlDocument document = new HtmlDocument();
document.LoadHtml(html);
for (int i = 6; i <= 9; i++)
{
//*[@id=":6"]/div/text() //*[@id=":6"]/div/div
Debug.WriteLine(i);
var element = document.DocumentNode.SelectSingleNode("//*[@id=':7']/div/text()");
Trace.WriteLine(element == null, "Element is null");
}
}
catch (Exception e)
{
this.ShowMessageAsync("Hata!", "Dilleri yüklerken hata ortaya çıktı.");
}
}
Element is null: True
始终输出(我试图使用 for 循环遍历语言,但是,它甚至对单个语言都不起作用!)
因为我还不能发表评论...你有没有试过在寻找元素之前先点击dropdwon? 单击 //*[@id='gt-sl-gms'] 或其内部 div 将使元素可见.. 那应该有用..
无论如何,我无法让 $x 在 google chrome 的控制台上工作。我目前收到未捕获的类型错误。不确定这是否与任何事情有关..
编辑:哦等等,我想我知道你的问题..仔细检查元素后,元素 (div) 似乎在文本之前还有另一个 div。所以试试 /*[@id=':7']/div/text()[2]
我猜你的xpath是错误的。您可以尝试类似的操作:
string Url = "https://translate.google.com/";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(Url);
var arabic = doc.DocumentNode.Descendants("div").FirstOrDefault(_ => _.ChildNodes.Any(node => node.Name.Equals("#text") && node.InnerText.Equals("Arabic")));