【发布时间】:2017-11-25 02:13:02
【问题描述】:
如何抓取使用 JavaScript 元素生成部分内容的网页?这是我的壁球俱乐部的本地法庭预订网站,据我所知,这是它调用来检索法庭预订的 JavaScript 脚本:
function load_js(url) {
var e = document.createElement("script");
e.src = url;
e.type = "text/javascript";
if (document.getElementsByTagName("head")[0].lastChild.src == e.src) {
document.getElementsByTagName("head")[0].replaceChild(e, document.getElementsByTagName("head")[0].lastChild);
}
else {
document.getElementsByTagName("head")[0].appendChild(e);
}
}
onload = function () {
setInterval("load_js('/js/bookings_reload.js.php')", 30000);
};
如何在 Flutter 中复制它?我可以抓取 HTML 并对其进行解析以创建 HTML 文档,但由于 Flutter 不允许使用 dart:html 库,因此我无法创建 ScriptElement 来复制 JavaScript 脚本。 Flutter 中是否有替代方案?
到目前为止,这是我的 Dart 函数:
var httpClient = createHttpClient();
getData() async {
// Send POST request to get authorized cookie
var response = await httpClient.post('http://bookings.squashgym.co.nz/login',
body: {'username': username, 'password': password});
// Send get request with authenticated cookie to get bookings
var courts = await httpClient.get('http://bookings.squashgym.co.nz/booking-sheet',
headers: {'cookie': response.headers['set-cookie']});
Document data = parse(courts.body);
httpClient.close();
}
谢谢!
【问题讨论】:
-
使用 WebView 可能会有更好的运气。我没有这方面的代码,所以我不能留下答案,但你可以打开一个“不可见”的 webview,要求它加载 URL,等到你对页面呈现感到满意,然后从 WebView 中获取 DOM。
-
pub.dartlang.org/packages/http可以导入http吗?将“包:http/http.dart”导入为 http;