【问题标题】:Scraping webpage with a table rendered using javascript utilizing Selenium Webdriver使用 Selenium Webdriver 使用 javascript 呈现的表格抓取网页
【发布时间】:2018-03-02 15:15:27
【问题描述】:

the source html of the page i am trying to scrape

我正在尝试使用 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 当我运行获取文本时,它只返回表中的一些条目

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 个表格条目,其余的不存在 我无法理解为什么我会收到“正在加载.....”

【问题讨论】:

  • 可能你必须等待表格加载所有条目。
  • 这只是意味着数据不存在。某些网站仅在您向下滚动时加载数据。因此,要么您需要向下滚动然后执行此操作,要么您需要在页面仍在加载时使用等待
  • 那么有没有其他方法可以读取整个表格
  • 向下滚动或不向下滚动时是否正在加载表格?
  • 我正在尝试使用 selenium 获取数据,所以我不知道如何以编程方式向下滚动

标签: javascript java selenium xpath selenium-webdriver


【解决方案1】:

我认为通过使用List&lt;WebElement&gt; k=driver.findElements(By.xpath("//*[@id='queue.table']"));,我们正在尝试制作一个列表,其中包含太多不需要的项目。相反,我觉得在包含缩进值的&lt;td&gt; 标记中获取节点并保存到列表中会很有效。接下来我们可以遍历列表并使用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); 
    }

【讨论】:

  • 我正在寻找表格行中的文本并修改为 my_element.getText 也没有太大帮助,因为我以重复的方式获得的值更少
  • @josephfrancis 如您所见,我已经更改了我的代码,现在拿起&lt;tr&gt; 节点并检索文本不是通过getText(),而是通过 getAttribute("innerHTML")。如果它符合您的问题,请接受答案。
  • 很遗憾没有;感谢您的努力
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 2021-06-21
  • 2014-02-22
  • 2021-06-04
  • 1970-01-01
  • 2018-04-21
相关资源
最近更新 更多