driver.SwitchTo().Frame("menu");
WebDriverWait wait1 = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
wait1.Until(ExpectedConditions.ElementExists(By.CssSelector("a[href='eventLog.cgi?command=0']")));
driver.FindElement(By.CssSelector("a[href='eventLog.cgi?command=0']")).Click();
driver.SwitchTo().Frame("content");
WebDriverWait wait2 = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait2.Until(ExpectedConditions.ElementExists(By.CssSelector("a[href='cgi-bin/terminal.cgi']")));
IWebElement baseTable = driver.FindElement(By.ClassName("TableText1"));
// gets all table rows
ICollection<IWebElement> rows = baseTable.FindElements(By.TagName("tr"));
// for every row
IWebElement matchedRow = null;
foreach (var row in rows)
{
Console.WriteLine(row.FindElement(By.XPath("td/a")).GetAttribute("href"));
}
首先在.Frame(“content”)中找不到内容,如果这个被注释,则在.FromSeconds(10)中超时。如果这是注释,那么在.FindElement(By.ClassName(“TableText1”)中找不到任何元素。 html代码在这里
<table class="TableText1" nowrap="">
<tbody><tr>
<tr>
<td class="Table_Header"> </td><td class="Table_Header"><a href="eventLog.cgi?command=0">User ID</a></td>
<td class="Table_Header"><a href="eventLog.cgi?command=0">Name</a></td>
<td class="Table_Header"><a href="eventLog.cgi?command=0">Department</a></td>
<td class="Table_Header"><a href="eventLog.cgi?command=0">Date Time<img src="/sort_arrow_down.gif" border="0"></a></td>
<tr nowrap=""><td class="Table_List">1</td><td class="Table_List"> <a href="employee.cgi?action=modify&rid=14">319</a></td><td class="Table_List">Abul Hosain</td><td class="Table_List">General</td><td class="Table_List">2017/01/29 15:22:33</td></tr>
<tr nowrap=""><td class="Table_List_diff">2</td><td class="Table_List_diff"> <a href="employee.cgi?action=modify&rid=49">310</a></td><td class="Table_List_diff">Tabassum Tamanna</td><td class="Table_List_diff">General</td><td class="Table_List_diff">2017/01/29 15:19:50</td></tr>
<tr><td colspan="10"><hr></td></tr>
<tr>
</tr></tbody></table>
答案 0 :(得分:1)
希望你正确切换frame
。如果您的文档中有多个框架并且您已切换到第1帧,那么首先需要从第一帧切换回来,如下所示 -
driver.SwitchTo().DefaultContent();
然后切换另一个frame
并执行您的操作
使用以下代码提取表格数据 -
IList<IWebElement> allElement = driver.FindElements(By.TagName("td"));
foreach (IWebElement element in allElement )
{
string cellText= element.Text;
Console.WriteLine(cellText);
}
答案 1 :(得分:0)
我怀疑这个问题是不同的时间框架......简而言之:
该表可以由客户端库(如角度,反应等)呈现,或者通过ajax调用从服务器请求...
请在检查内容之前使用延迟 - 为您的网页提供一些时间来正确加载。 (特别是在处理包含大量信息的表格或其他控件时)
答案 2 :(得分:0)
下面是读取表格内容的C#代码
!wget https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/ds_ctcdecoder-0.9.3-cp36-cp36m-manylinux1_x86_64.whl
!pip install /content/~path~/ds_ctcdecoder-0.9.3-cp36-cp36m-manylinux1_x86_64.whl