【问题标题】:Information inside Html Node not visibleHtml 节点内的信息不可见
【发布时间】:2017-11-27 12:06:31
【问题描述】:

我正在尝试从网站的节点中获取电话号码。由于某种原因,当我检查 chrome 中的节点时,元素内部的实际数字不可见。这是我试图从中获取号码的网站:https://tempophone.com/。我是在检查错误的元素,还是无法通过访问节点从网站上获取电话号码。这是我的代码,我正在使用 htmlAgilityPack:

        string url = "https://tempophone.com/";
        HtmlWeb web = new HtmlWeb();
        HtmlDocument doc = web.Load(url);

        var phoneNumber = doc.DocumentNode.SelectNodes("//*[@id=\"temporary - phone\"]")[0].InnerText;
        if(phoneNumber != null)
            Console.WriteLine(phoneNumber);
        else
            Console.WriteLine("null");

这是被检查元素的截图,你可以看到那里没有电话号码:

【问题讨论】:

    标签: javascript c# html html-agility-pack


    【解决方案1】:

    首先,该节点内没有文本。

    第二个你想要的是这个。

    string s = doc.DocumentNode.SelectNodes("//*[@id='temporary-phone']")[0].GetAttributeValue("value", "false");
    

    第三。这将始终返回“正在加载...”。因为节点中的属性“值”是通过使用 javascript 更新/更改的。当您使用 HtmlWeb 或 HttpWebRequest 时,您将始终获取页面的来源。如果您希望能够将动态内容加载到 HtmlDocument 中,则需要使用 WebBrowser 或 Selenium 和 WebDriver。

    如何使用 Selenium 和 FirefoxDriver

            var driver = new FirefoxDriver();
            driver.Navigate().GoToUrl("https://tempophone.com/");
            Thread.Sleep(2000);
            driver.FindElement(By.XPath("//button[@id='check-phone']")).Click();
            string s = driver.FindElement(By.XPath("//h1[@id='phone-number']")).GetAttribute("data-phone-number");
            Console.WriteLine("Here: " + s);
    

    或者你可以直接调用他们的 API

    https://tempophone.com/api/v1/phones/random

    【讨论】:

    • 你是如何找到他们 api 的 url 的?
    • 使用了网络调试器。
    猜你喜欢
    • 2021-12-21
    • 2017-12-20
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2015-10-03
    相关资源
    最近更新 更多