2016-01-28 67 views
0

我正在使用Java中的Selenium庫來取消site.I使用PhantomJsDriver作爲webdriver.This網站有一些網址目前在我感興趣的列表(李)標籤。問題是,該網站有64個(LI)的元素,但我只接受16(LI)elements.Here是我的代碼:無法使用Selenium PhantomJs驅動程序加載整個頁面

DesiredCapabilities caps=new DesiredCapabilities(); 
caps.setJavascriptEnabled(true); 
caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY , "Path"); 
WebDriver driver=new PhantomJSDriver(caps); 
driver.get("Some Website"); 

WebDriverWait wait=new WebDriverWait(driver, 600); 

wait.until(new ExpectedCondition<Boolean>() { 
    boolean resetCount=true; 
    int counter=5; 
    @Override 
    public Boolean apply(WebDriver d) { 
     if(resetCount){ 
      ((JavascriptExecutor) d).executeScript(
        " window.mssCount="+counter+";\r\n" + 
        " window.mssJSDelay=function mssJSDelay(){\r\n" + 
        "  if((typeof jQuery != 'undefined') && (jQuery.active !== 0 || $(\":animated\").length !== 0))\r\n" + 
        "   window.mssCount="+counter+";\r\n" + 
        "  window.mssCount-->0 &&\r\n" + 
        "  setTimeout(window.mssJSDelay,window.mssCount+1);\r\n" + 
        " }\r\n" + 
        " window.mssJSDelay();"); 
      resetCount=false; 
     } 
     boolean ready=false; 
     try{ 
      ready=-1==((Long) ((JavascriptExecutor) d).executeScript(
        "if(typeof window.mssJSDelay!=\"function\"){\r\n" + 
        " window.mssCount="+counter+";\r\n" + 
        " window.mssJSDelay=function mssJSDelay(){\r\n" + 
        "  if((typeof jQuery != 'undefined') && (jQuery.active !== 0 || $(\":animated\").length !== 0))\r\n" + 
        "   window.mssCount="+counter+";\r\n" + 
        "  window.mssCount-->0 &&\r\n" + 
        "  setTimeout(window.mssJSDelay,window.mssCount+1);\r\n" + 
        " }\r\n" + 
        " window.mssJSDelay();\r\n" + 
        "}\r\n" + 
        "return window.mssCount;")); 
     } 
     catch (NoSuchWindowException a){ 
      a.printStackTrace(); 
      return true; 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
     return ready; 
    } 
    @Override 
    public String toString() { 
     return String.format("Timeout waiting for documentNotActive script"); 
    } 
}); 


BufferedWriter bw=new BufferedWriter(new FileWriter(new File("C:\\abc.txt"))); 
bw.write(driver.getPageSource()); 
bw.close(); 
driver.quit(); 

我從一個answer.My重用在wait.until代碼()問題是爲什麼它只返回16個元素?我認爲它應該不返回任何元素或全部元素。標籤數量或文檔大小是否有限制?這裏有什麼解決方案?

回答

0

嘗試添加

隱含的等待是爲了告訴webdriver的努力,如果他們 沒有立即找到一種或多種元素時,輪詢DOM一定 的時間。默認設置爲0.一旦設置, 隱式等待設置爲WebDriver對象實例的生命週期。

WebDriver driver=new PhantomJSDriver(caps); 
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
+0

你或許應該更多地討論一些原因,這將有助於 –

+0

它想等待一段時間的元素才能夠完成,試試吧。 –

+0

謝謝你的幫助,但它沒有工作。我沒有注意到,該網站正在滾動添加DOM。所以現在我能夠獲取所有元素。 – NikhilEkbote

相關問題