0

私はセレンをWebスクレイパーとして使用しており、いくつかのテーブルを見つけてから、すべてのテーブルについて(ループによって)そのテーブル内の要素を見つけたいと考えています(ドキュメント全体を再度調べずに)。

を使用していますが、「 」Iwebelement.FindElements(By.XPath)というエラーが表示され続けますelement no longer connected to DOM

ここに私のコードからの抜粋があります:

IList[IWebElement] elementsB = driver.FindElements(By.XPath("//*[@id=\"col_main\"]/table[@class='risultati']")); 

// which loads all tables with class 'risultati'

foreach (IWebElement iwe in elementsB)

{

IList[IWebElement] ppp = iwe.FindElements(By.XPath("//table"));

}

ここで、要素で見つかった各テーブル内から内部テーブルをロードしようとしていますが、上記のエラーが発生し続けます。

4

2 に答える 2

0

私はそれを次のようにします:

By tableLocator = By.XPath("//table");
By itemLocator = By.XPath("//*[@id=\"col_main\"]/table[@class='risultati']");

for(WebElement iwe : elementsB) {
   List<WebElement> tableList = iwe.FindElements( tableLocator );
   for ( WebElement we : tableList ) {
       we.getElementByLocator( itemLocator );
       System.out.println( we.getText() );
   }
}

public static WebElement getElementByLocator( final By locator ) {
  LOGGER.info( "Get element by locator: " + locator.toString() );  
  final long startTime = System.currentTimeMillis();
  Wait<WebDriver> wait = new FluentWait<WebDriver>( driver )
    .withTimeout(30, TimeUnit.SECONDS)
    .pollingEvery(5, TimeUnit.SECONDS)
    .ignoring( StaleElementReferenceException.class ) ;
  int tries = 0;
  boolean found = false;
  WebElement we = null;
  while ( (System.currentTimeMillis() - startTime) < 91000 ) {
   LOGGER.info( "Searching for element. Try number " + (tries++) ); 
   try {
    we = wait.until( ExpectedConditions.visibilityOfElementLocated( locator ) );
    found = true;
    break;
   } catch ( StaleElementReferenceException e ) {      
    LOGGER.info( "Stale element: \n" + e.getMessage() + "\n");
   }
  }
  long endTime = System.currentTimeMillis();
  long totalTime = endTime - startTime;
  if ( found ) {
   LOGGER.info("Found element after waiting for " + totalTime + " milliseconds." );
  } else {
   LOGGER.info( "Failed to find element after " + totalTime + " milliseconds." );
  }
  return we;
}
于 2013-04-01T18:10:52.897 に答える