从使用 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();
}
}
结果
我正在尝试从网页中获取一些数据 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();
}
}
结果