Tidak dapat memuat seluruh halaman menggunakan driver Selenium PhantomJs

Saya menggunakan perpustakaan Selenium di Java untuk menghapus situs. Saya menggunakan PhantomJsDriver sebagai webdriver. Situs ini memiliki beberapa url dalam tag daftar(li) yang saya minati. Masalahnya adalah situs tersebut memiliki 64 (li) elemen tetapi Saya hanya menerima 16 (li) elemen. Ini kode saya:

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

Saya telah menggunakan kembali kode di wait.until() dari sebuah jawaban. Pertanyaan saya adalah mengapa ia hanya mengembalikan 16 elemen? Saya berasumsi bahwa itu tidak akan mengembalikan semua elemen. Apakah ada batasan jumlah tag atau ukuran dokumen?. Apa solusinya di sini?


person NikhilEkbote    schedule 28.01.2016    source sumber


Jawaban (1)


coba tambahkan

Penantian implisit adalah memberi tahu WebDriver untuk melakukan polling DOM selama jangka waktu tertentu ketika mencoba menemukan elemen atau elemen jika tidak segera tersedia. Pengaturan defaultnya adalah 0. Setelah disetel, waktu tunggu implisit disetel selama masa pakai instance objek WebDriver.

WebDriver driver=new PhantomJSDriver(caps);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
person Leon Barkan    schedule 28.01.2016
comment
Anda mungkin harus menjelaskan lebih lanjut mengapa hal itu bisa membantu - person Diego Martinoia; 28.01.2016
comment
seharusnya menunggu sedikit lebih lama hingga elemennya selesai, cobalah. - person Leon Barkan; 28.01.2016
comment
Terima kasih atas bantuan Anda tetapi tidak berhasil. Yang tidak saya perhatikan adalah situs tersebut menambahkan DOM saat menggulir. Jadi sekarang saya dapat mengambil semua elemen. - person NikhilEkbote; 29.01.2016