gpt4 book ai didi

java - Javascript 更新后获取更改后的 HTML 内容? (html单元)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:07 26 4
gpt4 key购买 nike

我在弄清楚如何在 javascript 更新之后 获取某些 HTML 的内容时遇到了一些麻烦。

具体来说,我正在尝试从 US Naval Observatory Master Clock 获取当前时间.它有一个 h1 元素,其 IDUSNOclk,其中显示当前时间。

当页面首次加载时,此元素设置为显示“正在加载...”,然后 javascript 启动并通过将其更新为当前时间

function showTime()
{
document.getElementById('USNOclk').innerHTML="Loading...<br />";
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null){
document.getElementById('USNOclk').innerHTML="Sorry, browser incapatible. <BR />";
return;
}
refresher = 0;
startResponse = new Date().getTime();
var url="http://tycho.usno.navy.mil/cgi-bin/time.pl?n="+ startResponse;
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}

所以,问题是我不确定如何获取更新时间。当我检查该元素时,我看到“正在加载...”作为 h1 元素的内容。

我仔细检查了 javascript 是否已启用,并且我尝试在 webclient 上调用 waitForBackgroundJavaScript 函数,希望它能给 javascript 时间开始更新东西。但是,到目前为止还没有成功。

我当前的代码:

import com.gargoylesoftware.htmlunit._
import com.gargoylesoftware.htmlunit.html.HtmlPage

object AtomicTime {

def main(args: Array[String]): Unit = {
val url = "http://tycho.usno.navy.mil/what.html"
val client = new WebClient(BrowserVersion.CHROME)

println(client.isJavaScriptEnabled()) // returns true
client.waitForBackgroundJavaScript(10000)
// client.waitForBackgroundJavaScriptStartingBefore(10000) //tried this one too without success
var response: HtmlPage = client.getPage(url)
println(response.asText())
}
}

如何触发 javascript 更新 HTML?

最佳答案

我想通了!

HtmlPage 对象有一个 executeJavaScript(String) 可以用来启动 showTime 脚本。然后,一旦脚本实际启动,这就是 waitForBackgroundJavaScript 变得相关的时候。

我得到的代码:

import com.gargoylesoftware.htmlunit._
import com.gargoylesoftware.htmlunit.html.HtmlPage
import com.gargoylesoftware.htmlunit.html.DomElement

object AtomicTime {

def main(args: Array[String]): Unit = {
val url = "http://tycho.usno.navy.mil/what.html"
val client = new WebClient(BrowserVersion.CHROME)

var response: HtmlPage = client.getPage(url)
response.executeJavaScript("showTime")

printf("Current AtomicTime: %s", getUpdatedRespose(response, client))
}

def getUpdatedRespose(page: HtmlPage, client: WebClient): String = {
while (page.getElementById("USNOclk").asText() == "Loading...") {
client.waitForBackgroundJavaScript(200)
}
return page.getElementById("USNOclk").asText()
}
}

关于java - Javascript 更新后获取更改后的 HTML 内容? (html单元),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17843521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com