Python 3.x 读取实时表-Selenium

Python 3.x 读取实时表-Selenium,python-3.x,selenium,Python 3.x,Selenium,我试图读取一个动态表,它每秒更新1-3次。我使用的是Python 3.x中的Selenium,但如果您有其他语言的解决方案,我也可以解决这个问题 我的问题是:阅读频繁更新的表格的最佳实践是什么 我所尝试的: 驱动程序。等待。以及预期条件 如果抛出过时异常,则通过调用find_elements重新读取该表 由于刷新率高,这两个选项都不起作用。我可以暂时成功地检索该表,但当我尝试在稍后访问它的行时,我得到了一个陈旧的异常。值得一提的是,当我在同一个表中尝试相同的代码时,更新频率较低,一切正常 我

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

我的问题是:阅读频繁更新的表格的最佳实践是什么

我所尝试的

  • 驱动程序。等待。
    以及
    预期条件
  • 如果抛出过时异常,则通过调用
    find_elements
    重新读取该表
由于刷新率高,这两个选项都不起作用。我可以暂时成功地检索该表,但当我尝试在稍后访问它的行时,我得到了一个陈旧的异常。值得一提的是,当我在同一个表中尝试相同的代码时,更新频率较低,一切正常

我暂时不发布任何代码,因为我想知道更有经验的人在这种情况下会做什么


我天真的想法:我不擅长(但热衷于学习)网页抓取或任何与网页相关的语言,我会说,如果这是动态数据的问题,我会使用指针或实际表的引用(然后在行上动态循环)。在这个框架中,这是可能的吗?

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

假设其目的是每秒钟打印一次表中的第二个数据元素,我们的代码如下所示(很抱歉用Java提供代码)

//如果页面是静态的,这将起作用
WebElement=driver.findElement(By.xpath(“//td[2]”);
对于(int i=0;i<10;i++)
{
System.out.println(element.getText());
睡眠(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);
  }
//这将适用于动态内容
WebElement=null;
对于(int i=0;i<10;i++)
{
element=driver.findElement(By.xpath(“//td[2]”);
System.out.println(element.getText());
睡眠(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);
  }
//在这种情况下,我们需要第五个单元格值
int j=5;
WebElement=null;
对于(int i=0;i<10;i++)
{
element=driver.findElement(By.xpath(“//td[“+j+”]);
System.out.println(element.getText());
睡眠(1000);
}
在这种情况下,如果需要所有五个单元格值,
WebElement=null;

对于(int i=1;这很有意义。如果我需要第i行而不是单个元素,我不知道数字i,但我知道行上的条件,该怎么办?我如何循环我每次都需要更新的内容?更新了我的答案…如果您需要我帮助根据行上的条件识别特定内容,我需要DOM。我们需要使用XPATH中的以下或之前的同级来识别特定单元格。啊,好的,基本上我是检索表,然后在行上循环,wh正如你说的,我应该直接检索行。这是有道理的。我会试试看。是的。一行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);
  }