【问题标题】:Python: selenium and beautifulsoup how to handle lazy-load-like webpage?Python:selenium 和 beautifulsoup 如何处理类似延迟加载的网页?
【发布时间】:2020-11-06 00:41:17
【问题描述】:

使用 selenium 和 beautifulsoup 从 AgilePLM(Oracle) 抓取数据, 如果项目列表太长,则需要鼠标滚动才能将数据加载到 DOM, 这意味着在手动将列表一一滚动到末尾之前,数据不会完全加载到 html 中。

通过发送END键直接滚动到末尾是没有意义的,会丢失中间的项目。

有什么方法可以实现这个需求吗?像其他类似延迟加载的页面一样吗?

【问题讨论】:

标签: python-3.x selenium beautifulsoup


【解决方案1】:

我不知道如何在 Python 上编写代码,但这是我用于滚动到延迟加载列表中的元素的 Java 代码。

public boolean scrollDownUntilElementVisible(By scrollableElement, By targetElement, By loadSpinner, int timeoutInSeconds) {

    ExpectedCondition expectedElement = ExpectedConditions.visibilityOfElementLocated(targetElement);
    ExpectedCondition waitForLoading = ExpectedConditions.invisibilityOfElementLocated(loadSpinner);

    WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds, 1);
    JavascriptExecutor executor = (JavascriptExecutor) driver;

    WebElement element = findElement(scrollableElement);
    String script = "arguments[0].scrollBy(0, arguments[0].getBoundingClientRect().height)";

    wait.until(driver -> {
        new WebDriverWait(driver, timeoutInSeconds, 100).until(waitForLoading);
        try {
            new WebDriverWait(driver, 1, 100).until(expectedElement);
            return true;
        } catch (TimeoutException ignored) {
        }
        executor.executeScript(script, element);
        return false;
    });
    return false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多