阅读实时表 - Selenium

时间:2017-05-30 21:39:33

标签: python-3.x selenium

我试图读取动态表格,每秒更新1-3次。我在Python 3.x中使用Selenium,但是如果你有其他语言的解决方案,我也可以解决它。

我的问题是:阅读经常更新的表格的最佳做法是什么?

我尝试了什么

  • driver.wait.until以及expected_conditions
  • 如果抛出过时的异常,则通过调用find_elements重新读取该表

由于高刷新率,它们都没有工作。我可以暂时成功检索表,但是当我尝试访问它的行时,我得到一个陈旧的异常。值得一提的是,当我在同一个表中尝试相同的代码时,更新频率较低,一切正常。

我暂时没有发布任何代码,因为我有兴趣知道在这种情况下更有经验的人做了什么。

我天真的想法:在网络抓取或任何网络相关语言中都不是专家(但很想学习),我说如果这是动态数据的问题,我将指针或对实际表的引用(然后在行上动态循环)。这可能在这个框架中吗?

1 个答案:

答案 0 :(得分:2)

与Webelement创建时的属性相比,当Webelement目前已更改时,我们通常会遇到过时的元素异常。

假设我的意图是每秒在表格中打印第二个数据元素,我们的代码看起来像这样,(很抱歉用Java提供代码)

//This will work if the page is static

  WebElement element = driver.findElement(By.xpath("//td[2]"));
  for(int i = 0; i< 10;i++)
  {
      System.out.println(element.getText());
      Thread.sleep(1000);
  }

为了使这个工作用于动态加载表/刷新表,我们需要在每次迭代之前启动webelement,

//This will work for dynamic content 

  WebElement element = null;
  for(int i = 0; i< 10;i++)
  {
      element = driver.findElement(By.xpath("//td[2]"));
      System.out.println(element.getText());
      Thread.sleep(1000);
  }

在这种情况下,如果需要在表中获取第i个单元格值,我们可以参数xpath中的值,例如,

  //In this case we need the fifth cell value
  int j = 5;
  WebElement element = null;
  for(int i = 0; i< 10;i++)
  {
      element = driver.findElement(By.xpath("//td["+j+"]"));
      System.out.println(element.getText());
      Thread.sleep(1000);
  }

  In the case if you need to have all five cell values,

  WebElement element = null;
  for(int i = 1; i<=5;i++)
  {
      element = driver.findElement(By.xpath("//td["+i+]"));
      System.out.println(element.getText());
      Thread.sleep(1000);
  }

相应地构建一个循环。

希望这会对你有所帮助。感谢。