1

我在交互式硒中创建了一个自定义处理程序,如下所示

public class SomeHandler implements InteractiveSeleniumHandler {
  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
  public String processDriver(WebDriver driver) {
    String accumulatedData = "";
    try {
      Configuration conf = NutchConfiguration.create();
      new WebDriverWait(driver, conf.getLong("libselenium.page.load.delay", 3));
      WebElement more = driver.findElement(By.className("ulBlueLinks"));
      more.click();
      LOG.error("before collecting data:");
      JavascriptExecutor jsx = (JavascriptExecutor) driver;
      jsx.executeScript("document.body.innerHTML=document.body.innerHTML;");
  accumulatedData =  driver.findElement(By.tagName("body")).getAttribute("innerHTML");      
    } 
    catch (Exception e) {
      LOG.error(StringUtils.stringifyException(e));
    }
    return accumulatedData;
  }
  public boolean shouldProcessURL(String URL) {
  return true;
  }
}

问题是有时我得到了整个数据(包括点击事件后的数据),有时它没有得到动态数据。

注意:我可以在浏览器中看到点击事件。我正在使用以下内容:

  1. 火狐 61
  2. 硒 3.13
  3. 阿帕奇纳奇 1.14
4

1 回答 1

1

单击后等待一段时间以加载页面。

你可以等待document.readyState = complete哪个会等到页面被加载。

((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
于 2018-07-27T05:56:48.930 回答