我有以下代码:

import java.io.IOException;

import com.machinepublishers.jbrowserdriver.JBrowserDriver;
import com.machinepublishers.jbrowserdriver.Settings;
import com.machinepublishers.jbrowserdriver.Timezone;

public class ReadMovies {

    public static void main(final String[] args) throws IOException {
        final JBrowserDriver driver = new JBrowserDriver(Settings.builder().timezone(Timezone.AMERICA_NEWYORK).build());
        driver.get("http://www.cinesift.com/#/");

        driver.executeScript("window.scrollTo(0, document.body.scrollHeight)");

        System.out.println(driver.getPageSource());

        driver.quit();
    }
}


但是,executeScript()似乎没有任何作用-程序仍会在首次加载页面时打印原始源(因此不会加载其他元素)。有人知道怎么了吗?

最佳答案

向下滚动页面时,还会加载其他电影。如果要加载全部或某些数量的电影,则必须连续向下滚动并等待。

天真的实现:

int DESIRED_COUNT = 100;
int currentCount = driver.findElements(By.cssSelector("#films .film")).size();

while (currentCount < DESIRED_COUNT) {
    driver.executeScript("window.scrollTo(0, document.body.scrollHeight)");
    Thread.sleep(1000);
    currentCount = driver.findElements(By.cssSelector("#films .film")).size();
}

// now get the page source
System.out.println(driver.getPageSource());


通过Thread.sleep()WebDriverWait等待可能应该替换为“显式等​​待”。

09-08 06:12