【问题标题】:Selenium Java - Fetching page source via JavascriptExecutorSelenium Java - 通过 JavascriptExecutor 获取页面源
【发布时间】:2015-04-05 23:15:29
【问题描述】:

我想在页面的源代码由于一些 ajax 请求而改变后阅读。由于我的想法已经用完了,我尝试了 JavaScript,但 executeScript() 函数总是返回 null。任何帮助将不胜感激。

我使用FirefoxDriver。我的代码如下所示:

Object test = ((JavascriptExecutor) firefox).executeScript("function getHTML(){ return document.body.innerHTML;} getHTML();");
System.out.println(test);

【问题讨论】:

    标签: java javascript selenium selenium-webdriver


    【解决方案1】:

    您需要从脚本返回一些内容

    Object test = ((JavascriptExecutor) firefox).executeScript("return document.body.innerHTML;");
    

    【讨论】:

    • 我认为通过 getHTML() 调用我的函数就足够了。但是您的解决方案有效,所以我非常感激。干杯! :)
    • @alecxe 为什么 OPS 代码不起作用。我可以轻松地在 Chrome 上测试它并运行
    • @Saifur 很好,添加 return 也可以解决问题:function getHTML(){ return document.body.innerHTML;} return getHTML();
    • 嗯,很有趣。感谢您的澄清。
    • @Saifur 是的,使用 python 绑定对其进行了测试:没有return 我什么也得不到,有 - 我得到了身体的innerHTML。谢谢。
    【解决方案2】:

    我假设 dom 未处于就绪状态,并且您尝试获取的速度太快。 我正在稍微修改 alecxe 的答案,以添加额外的显式等待,以确保 dom 处于就绪状态。 该程序将等待 10 秒以确保 dom 处于就绪状态。

    Wait<WebDriver> wait = new WebDriverWait(driver,10);
    wait.until(new Function<WebDriver, Boolean>() {
        public Boolean apply(WebDriver driver) {
            return ((JavascriptExecutor) driver).executeScript("return document.readyState;").equals("complete");
        }
    });
    
    Object test = ((JavascriptExecutor) driver).executeScript("return document.body.innerHTML;");
    

    【讨论】:

    • @dadoosh 已修改。看看
    • 非常感谢您的努力,但它们似乎没有任何区别。我正在检查一些属性值,有趣的是,driver.findElement() 正确地返回它们,而你的和 alecxe 的却没有。尽管如此,每个findElement() 调用大约需要 0.1 秒,而且我必须在关键时刻检查 10 多个元素。我的代码如下所示,也许我做错了什么?
    • Object test = stackOverflowMethod(firefox); Document doc = Jsoup.parse(test.toString()); debugger.println(doc.getElementById("input_field1").attr("value")); debugger.println(firefox.findElement(By.xpath(XPaths.INPUT_FIELD_1).getAttribute("value")); stackOverfflowMethod() 显然 100% 是您发布的代码。 *编辑:对不起,我太愚蠢了,无法在 cmets 中适当地使用代码标签 -.-
    猜你喜欢
    • 2021-12-21
    • 2015-09-24
    • 1970-01-01
    • 2016-10-30
    • 2019-05-10
    • 2020-05-30
    • 2016-01-13
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多