首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用iframe c#从网页中刮取数据

使用iframe c#从网页中刮取数据
EN

Stack Overflow用户
提问于 2020-11-25 18:12:55
回答 1查看 373关注 0票数 0

我正在尝试从网页https://www.thpa.gr/index.php/en/services-3/search-ek获取一些数据。

如果容器是卸载的,则返回容器的数量(例如OOLU0198315)和其他一些信息。我的问题是,据我所知,这是在iframe (或javascript)中完成的,并且它没有将网页中的数据作为代码包含进来。

例如,如果搜索OOLU0198315,它将返回以下数据

代码语言:javascript
复制
<tr bgcolor="#fafafa"> 
<td style="padding:7px">OOLU0198315</td>
<td style="padding:7px">781442-1</td>
<td style="padding:7px">ΦΟΡΤΩΣΗ</td>
<td style="padding:7px">Nov 24 2020 11:04:26:217AM</td>
<td style="padding:7px">Δεν εκδόθηκε τιμολόγιο</td></tr>

它不包含任何根据Xpath或id获取数据的id或类。

我试图根据先前的问题How can I scrape a table that is created with JavaScript in c#获取这些数据

但我不能遵循同样的解决方案。我尝试使用Selenium和HtmlAgilityPack,但是没有Xpath来获取数据。还有其他方法来获取这些信息吗?

到目前为止我用HtmlAgilityPack编写的代码

代码语言:javascript
复制
WebClient webClient = new WebClient();
        string page = webClient.DownloadString("https://www.thpa.gr/index.php/en/services-3/search-ek");

        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(page);

        List<List<string>> table = doc.DocumentNode.SelectSingleNode("/html/body/div/table/tbody/tr[2]")
                    .Descendants("tr")
                    .Skip(1)
                    .Where(tr => tr.Elements("td").Count() > 1)
                    .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim()).ToList())
                    .ToList();

加上硒

代码语言:javascript
复制
      using (var driver = new ChromeDriver())
                {
                    driver.Navigate().GoToUrl("https://www.thpa.gr/index.php/en/services-3/search-ek");               
                    var containerInfo = driver.FindElementById("I dont have Id");
                }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-25 20:10:50

我说的只是使用父url进行数据提取,您仍然可以使用iframe源路径访问所需的内容。

您可以实现这样的东西来提取所需的数据,这段代码可能需要一些重构,但它为您的业务需求提供了一个如何进一步开发的思路。

代码语言:javascript
复制
internal class Program
{
    private  static string LoadContent(string reference)
    {
        string url = $"https://portal.thpa.gr/fnet5/track/index.php";

        var hc = new HttpClient();

        var reqUrlContent =
             hc.PostAsync(url,
            new StringContent($"d=1&containerCode={reference}&go=1", Encoding.UTF8,
            "application/x-www-form-urlencoded"))
            .Result;
         

        Stream stream =  reqUrlContent.Content.ReadAsStreamAsync().Result;

        HtmlDocument doc = new HtmlDocument();

        doc.Load(stream);

        return doc.DocumentNode.InnerHtml;
    }

    private static void Main(string[] args)
    {
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(LoadContent("OOLU0198315"));

        HtmlNode[] nodes = doc.DocumentNode
            .SelectNodes("//td[@style='padding:7px']")
            .ToArray();
        foreach (HtmlNode item in nodes)
        {
            Console.WriteLine(item.InnerHtml);
        }

        Console.ReadKey();
    }
}

结果

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65010484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档