我使用net / http包来获取url html响应,它一直运行到现在为止 但是当我得到一个使用Ajax来填充某些html元素的页面时,我无法获得html页面的所有内容。
如何使用http.Get完全等待页面加载然后获取整个网页内容。谢谢!
response, err := http.Get(url)
if err != nil {
fmt.Printf("%s", err)
os.Exit(1)
} else {
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Printf("%s", err)
os.Exit(1)
}
fmt.Printf("%s\n", string(contents))
}
答案 0 :(得分:2)
通过javascript生成的内容不是服务器发送的HTML的一部分。它需要在客户端进行评估,并且由于您的客户端是Go程序,您需要自己进行评估。
像Otto这样的图书馆可能有所帮助。但是,根据您的需求,重新评估您的工具并使用像PhantomJS或类似的无头“浏览器”甚至可能更好。
答案 1 :(得分:2)
使用普通HTTP库无法提出要求:您还需要Web浏览器的DOM和JavaScript部分,甚至可能需要布局,具体取决于脚本的功能。因此,与net/http
软件包相比,您最好不要考虑如何编写Web浏览器脚本以执行所需操作,或者使用可嵌入的Web浏览器库。
或者,您可以尝试逆向工程网页中的AJAX脚本正在执行的操作。如果您可以确定它正在执行的HTTP调用,则可以提供您所追求的信息。它还可以以更容易处理的形式提供信息,如JSON或XML。 Firefox和Chrome中的Web开发人员工具功能对于此类任务非常有用。