我正在尝试从网页https://www.thpa.gr/index.php/en/services-3/search-ek获取一些数据。
如果容器是卸载的,则返回容器的数量(例如OOLU0198315)和其他一些信息。我的问题是,据我所知,这是在iframe (或javascript)中完成的,并且它没有将网页中的数据作为代码包含进来。
例如,如果搜索OOLU0198315,它将返回以下数据
<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编写的代码
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");
}发布于 2020-11-25 20:10:50
我说的只是使用父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://stackoverflow.com/questions/65010484
复制相似问题