从使用 iframe c# 的网页中抓取数据

Scrape data from web page that using iframe c#

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

基本上你输入容器的编号(例如 OOLU0198315)和 returns 如果容器已卸载和一些其他信息。 我的问题是,据我所知,这是在 iframe(或 javascript)中制作的,它不包含网页中的数据作为代码。

例如,如果您搜索 OOLU0198315 它 returns 以下数据

<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>

其中不包含任何id或class根据Xpath或根据id获取数据

我试图根据之前的问题获取这些数据

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

到目前为止我的代码使用 HtmlAgilityPack

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();

还有硒

      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");
                }

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

您可以实施类似的方法来提取所需的数据,此代码可能需要进行一些重构,但它可以让您了解如何进一步开发以满足您的业务需求

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();
    }
}

结果