Java 如何让jsoup等待加载完整页面(跳过进度页面)?

Java 如何让jsoup等待加载完整页面(跳过进度页面)?,java,web-scraping,jsoup,Java,Web Scraping,Jsoup,我正在尝试使用Jsoup解析网页并提取数据。但是这个链接是动态的,在显示细节之前会抛出一个等待加载页面。因此,Jsoup似乎处理等待页面,而不是详细信息页面。是否有任何方法使此等待页面完全加载 可能,所讨论的页面不是由浏览器(客户端)中的JavaScript生成的。Jsoup不解释JavaScript,因此您运气不好。但是,您可以在浏览器开发人员工具的“网络”选项卡中分析页面加载,并找出在页面加载期间进行了哪些AJAX调用。这些调用也有URL,您可以通过直接访问它们来获取所需的所有信息。或者,您

我正在尝试使用Jsoup解析网页并提取数据。但是这个链接是动态的,在显示细节之前会抛出一个等待加载页面。因此,Jsoup似乎处理等待页面,而不是详细信息页面。是否有任何方法使此等待页面完全加载

可能,所讨论的页面不是由浏览器(客户端)中的JavaScript生成的。Jsoup不解释JavaScript,因此您运气不好。但是,您可以在浏览器开发人员工具的“网络”选项卡中分析页面加载,并找出在页面加载期间进行了哪些AJAX调用。这些调用也有URL,您可以通过直接访问它们来获取所需的所有信息。或者,您可以使用真正的浏览器引擎来加载页面。如果您使用的是Java 8,则可以使用类似selenium webdriver的库或JavaFX webkit组件。

如果在加载页面后动态创建某些内容,则解析完整内容的最佳机会是将selenium与JSoup一起使用:

WebDriver driver = new FirefoxDriver();
driver.get("http://stackoverflow.com/");
Document doc = Jsoup.parse(driver.getPageSource());

我想我只是把卢卡奇的答案再扩展一点。我不熟悉web框架,所以答案看起来有点难理解。因为页面是使用像Jsoup这样的解析器动态加载的,所以很困难,因为我们必须知道在尝试解析之前所有元素都已完全加载。因此,不要立即解析,而是使用webdriver(selenium)检查元素状态,一旦加载元素,就获取页面源并解析,或者使用webdriver本身来收集所需的数据,而不是使用单独的解析器

WebDriver driver = new ChromeDriver();
    driver.get("<DynamicURL>");
    List<WebElement> elements = null;
    while (elements == null)
    {
        elements = driver.findElements(By.className("marker"));
        if (!valuePresent(elements))
        {
            elements = null;
        }
    }
    if (elements != null)
    {
        processElements(elements);
    }
WebDriver=new ChromeDriver();
驱动程序。获取(“”);
列表元素=null;
while(元素==null)
{
elements=driver.findElements(按.className(“标记”));
如果(!valuePresent(元素))
{
元素=空;
}
}
if(元素!=null)
{
过程元素(元素);
}

您可以添加URL和真实示例吗?您可以在此处尝试ui4j而不是Jsoup:。此外,如果我尝试解析的网页包含java脚本,则它不会等待执行,我会得到一个等待或加载页面。因此,等待元素加载而不是使用jsoup立即解析可能是更好的方法。这似乎对我有用。可能是因为我最初的问题包括了Jsoup用法,所以你的答案也包括了Jsoup。也许我应该把我的问题说得更清楚些。谢谢