使用jlen利用Selenium Webdriver呈现的表格刮擦网页

时间:2017-09-21 10:03:34

标签: javascript java selenium xpath selenium-webdriver

the source html of the page i am trying to scrape

Iam试图使用Selenium Webdriver抓取使用某些javascripts呈现的webtable

driver.get("http://xxxxx:xxxxxxxx@xxxxxx-
xxxxxx.grid.xxxxxx.com/Windchill/app/#ptc1/comp/queue.table");
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
List<WebElement> k=driver.findElements(By.xpath("//*[@id='queue.table']"));
System.out.println(k.size());
System.out.println(k.get(0).getText());

k.size()返回1 当我运行get text时,它只返回表中的一些条目

Actual table and entries the total rows are 135

跑步后我得到如下

              Queue Management
 Loading...

 Name
 Type
 Status
 Enabled
 Group
 Total Entries
 Waiting Entries
 Severe/Failed Entries
 DeleteCompletedWorkItemsQueu e
 Process
 Started
 Enabled
 Default
 0
 0
 0
 DeliveryStatusOnStartup
 Process
 Started
 Enabled
 Default
 0
 0
 0
 DTODeliverablesQueue
 Process
 Started
 Enabled
 Default
 0
 0
 0
 DTOOffPeakQueue
 Process
 Started
 Enabled
 Default
 0
 0
 0
Loading.........

我得到25个表的条目,其余的不存在 我无法理解为什么我得到了#34;正在加载......&#34;

1 个答案:

答案 0 :(得分:0)

我认为通过使用List<WebElement> k=driver.findElements(By.xpath("//*[@id='queue.table']"));我们试图在列表中列出包含太多不需要的项目的列表。相反,我觉得抓住<td>标签中包含缩进值并保存到列表中的节点会很有效。接下来,我们可以遍历列表并使用getText()方法或getAttribute()方法检索文本,如下所示:

driver.get("http://xxxxx:xxxxxxxx@xxxxxx-xxxxxx.grid.xxxxxx.com/Windchill/app/#ptc1/comp/queue.table");
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
List<WebElement> k = driver.findElements(By.xpath("//*[@id='queue.table']//tr"));
System.out.println(k.size());
for (WebElement my_element:k)
    {
        String innerhtml = my_element.getAttribute("innerHTML");
        System.out.println("Value from Table is : "+innerhtml); 
    }