C# 解析表没有';我不能得到所有的td元素

C# 解析表没有';我不能得到所有的td元素,c#,html-agility-pack,C#,Html Agility Pack,我正在使用C#和HTMLAgilityPack解析一个HTML表,并不是每行都返回所有td元素。它得到了第一个、第三个和第四个,但错过了第二个 我已经把代码循环了一遍,但不明白哪里出了错 HTML: 我希望循环遍历每个元素,但它直接从08:15到达伦敦盖特威克缺少EZY891我刚刚查看了网站,该表中没有第二列,因此您的代码工作正常 您更新的URL仍在转发到 哪个没有航班号使用HTMLAgilityPack有什么特别的原因吗 我向您介绍了Selenium库的工作代码。我使用了这两个库“OpenQA

我正在使用
C#
HTMLAgilityPack
解析一个HTML表,并不是每行都返回所有
td
元素。它得到了第一个、第三个和第四个,但错过了第二个

我已经把代码循环了一遍,但不明白哪里出了错

HTML:


我希望循环遍历每个元素,但它直接从08:15到达伦敦盖特威克缺少EZY891

我刚刚查看了网站,该表中没有第二列,因此您的代码工作正常

您更新的URL仍在转发到
哪个没有航班号

使用HTMLAgilityPack有什么特别的原因吗

我向您介绍了Selenium库的工作代码。我使用了这两个库“OpenQA.Selenium.Chrome”和“OpenQA.Selenium”,只是要确保您的Chrome版本是兼容的

static void Main(string[] args)
{
    var options = new ChromeOptions();           
    options.BinaryLocation = AppDomain.CurrentDomain.BaseDirectory + @"\chrome.exe";
    ChromeDriver driver = new ChromeDriver(options);           
    driver.Navigate().GoToUrl("http://www.jerseyairport.com/flight/Pages/arrivals.aspx");

    IWebElement table = driver.FindElementById("airportarrivals");
    IReadOnlyCollection<IWebElement> tdElements = table.FindElements(By.TagName("td"));
    foreach(IWebElement webElement in tdElements)
    {
        Console.WriteLine(webElement.GetAttribute("innerText"));
        Console.ReadLine();
    }
}

谢谢你提供的所有答案。答案很简单。我在网址中使用了,而不是。 我一纠正它就行了。
再次感谢

该网站没有关于
EZY891
的专栏。你从哪里得到这些信息的?你的URL是错误的,请使用
https://www.jerseyairport.com/Flight/Pages/Arrivals.aspx
。如果你使用这里的,它会将你重定向到一个列数较少的页面。抱歉,我一定是遗漏了什么。我正在使用这个网站。它有4列Sched./Flight No./Origin/Status。它返回Sched./Origin/Status。i、 它错过了第二列,航班号。对不起,它有4列。为什么我不能得到第二栏?使用Selenium比使用HTMLAgilityPack有什么好处吗。?而且,您的代码仍然只返回3列。它错过了航班号。对不起,你是对的,我复制了第一个URL而不是第二个。将de URL更改为“”,您还将获得航班号。如果您需要收集大量信息(大约200个元素作为WebElements一个接一个地在Web上循环),Selenium可能会慢一些。然而,在我看来,它比HTMLAgilityPack更友好,这个问题可以通过首先使用属性作为字符串,然后查找正确的IWebElement来解决。
//set the url we are interested in
string urlstring = 
"http://www.jerseyairport.com/flight/Pages/arrivals.aspx";
//use HTML Agilitypack to do the rest
HtmlWeb web = new HtmlWeb();
HtmlDocument document = web.Load(urlstring);      

foreach (HtmlNode flightdiv in 
document.DocumentNode.SelectNodes("//table[@id='airport" + "arrivals" 
+ "']/tbody//tr"))

{
 foreach (HtmlNode col in flightdiv.SelectNodes("td"))

            {
                System.Diagnostics.Debug.WriteLine(col.InnerText);

            }
}
static void Main(string[] args)
{
    var options = new ChromeOptions();           
    options.BinaryLocation = AppDomain.CurrentDomain.BaseDirectory + @"\chrome.exe";
    ChromeDriver driver = new ChromeDriver(options);           
    driver.Navigate().GoToUrl("http://www.jerseyairport.com/flight/Pages/arrivals.aspx");

    IWebElement table = driver.FindElementById("airportarrivals");
    IReadOnlyCollection<IWebElement> tdElements = table.FindElements(By.TagName("td"));
    foreach(IWebElement webElement in tdElements)
    {
        Console.WriteLine(webElement.GetAttribute("innerText"));
        Console.ReadLine();
    }
}
08:15
London Gatwick
Cancelled

13:10
Southampton
Landed at 13:16

13:10
London Gatwick
Landed at 13:25

13:10
London Gatwick
Landed at 13:25

13:25
Birmingham
Landed at 13:11