浏览器给出的 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")));