ไม่สามารถโหลดทั้งหน้าโดยใช้ไดรเวอร์ Selenium PhantomJs

ฉันใช้ไลบรารี Selenium ใน Java เพื่อทำลายไซต์ ฉันใช้ PhantomJsDriver เป็น webdriver ไซต์นี้มี URL บางส่วนอยู่ในแท็ก list(li) ที่ฉันสนใจ ปัญหาคือไซต์มีองค์ประกอบ 64 (li) แต่ ฉันได้รับองค์ประกอบเพียง 16 (li) นี่คือรหัสของฉัน:

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();

ฉันใช้โค้ดใน wait.until() ซ้ำจากคำตอบ คำถามของฉันคือเหตุใดจึงส่งคืนองค์ประกอบเพียง 16 รายการ ฉันคิดว่าไม่ควรส่งคืนองค์ประกอบใดเลยหรือทั้งหมด มีการจำกัดจำนวนแท็กหรือขนาดเอกสารหรือไม่ วิธีแก้ปัญหาที่นี่คืออะไร


person NikhilEkbote    schedule 28.01.2016    source แหล่งที่มา


คำตอบ (1)


ลองเพิ่ม

การรอโดยนัยคือการบอกให้ WebDriver สำรวจ DOM เป็นระยะเวลาหนึ่งเมื่อพยายามค้นหาองค์ประกอบหรือองค์ประกอบหากไม่พร้อมใช้งานในทันที การตั้งค่าเริ่มต้นคือ 0 เมื่อตั้งค่าแล้ว การรอโดยนัยจะถูกตั้งค่าสำหรับอายุของอินสแตนซ์ออบเจ็กต์ WebDriver

WebDriver driver=new PhantomJSDriver(caps);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
person Leon Barkan    schedule 28.01.2016
comment
คุณควรอธิบายรายละเอียดเพิ่มเติมว่าเหตุใดจึงจะช่วยได้ - person Diego Martinoia; 28.01.2016
comment
ควรจะรออีกสักหน่อยเพื่อให้องค์ประกอบเสร็จสมบูรณ์ ลองทำดู - person Leon Barkan; 28.01.2016
comment
ขอบคุณสำหรับความช่วยเหลือของคุณ แต่มันใช้งานไม่ได้ สิ่งที่ฉันไม่ได้สังเกตคือไซต์นั้นต่อท้าย DOM เมื่อทำการเลื่อน ดังนั้นตอนนี้ฉันสามารถดึงองค์ประกอบทั้งหมดได้แล้ว - person NikhilEkbote; 29.01.2016