Невозможно загрузить всю страницу с помощью драйвера Selenium PhantomJs

Я использую библиотеку Selenium на Java для удаления сайта. Я использую PhantomJsDriver в качестве веб-драйвера. На этом сайте есть некоторые URL-адреса, присутствующие в тегах списка (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