HTMLを変更するためのアクセス権がある場合は、テーブルのデータ要素にクラス宣言を入れてみてください。次に、XPathの代わりにBy.ClassNameを使用できます。
しかし、先に進む前に、あなたは正確に何をしようとしていますか?それは奇妙に思えます
CssSelectorsが.NetとIEで完全にサポートされると、それは素晴らしいオプションになりますが、今のところ信頼性はありません。今のところ、ドキュメントは標準モードでレンダリングする必要があることを忘れないでください。
tdとthではなくtdだけを見ることを検討する必要があります。それは確かに実行可能ですが、ある程度の複雑さを追加します。簡単にするために、以下でそれを行いました。通常、あなたはそれらがいくつあり、それらが何を保持しているかを知っており、それらを別々に扱います。
私が見つけたコードに入ると、By.TagNameに行くのが少しスピードアップしました。これには、43行4列で約20秒かかりました。
IWebElement table = driver.FindElement(By.TagName("table"));
ReadOnlyCollection<IWebElement> cells = table.FindElements(By.TagName("td"));
foreach (IWebElement cell in cells)
{
Console.WriteLine(cell.Text);
}
しかし、次に、ページソースをメモリにロードし、HtmlAgilityPackを使用してページを解析してみました。XMLパーサーを使用してhtmlドキュメントを読むことに注意してください。htmlは完全なXMLではない可能性があります。次のコードは96ミリ秒かかりました
HtmlDocument html = new HtmlDocument();
html.LoadHtml(driver.PageSource);
HtmlNodeCollection nodeCollect = html.DocumentNode.SelectNodes("//td");
foreach (HtmlNode node in nodeCollect)
{
Console.WriteLine(node.InnerText);
}
ページソースの読み込みと解析を行います。必要な場合は、ドキュメントチェック要素を繰り返し処理します。ナビゲート/対話する必要がある場合は、ドライバーに戻ります。