我想从我的 headlessWebView 中获取完成加载的网站的 HTML 代码,但最初,该网站执行一些 js。
得到我想要的东西的步骤是:
- 打开网站,
- 运行 javascript 函数以在文本字段上填充一些内容并按提交,
- 等待网站执行js并完成加载,
- 将 webview 的结果作为 HTML 代码存储在字符串中。
这是我下面的代码:
final GlobalKey webViewKey = GlobalKey();
InAppWebViewGroupOptions options = InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
useShouldOverrideUrlLoading: true,
mediaPlaybackRequiresUserGesture: false,
),
android: AndroidInAppWebViewOptions(
useHybridComposition: true,
),
ios: IOSInAppWebViewOptions(
allowsInlineMediaPlayback: true,
));
HeadlessInAppWebView headlessWebView;
String htmlCode = "";
@override
void initState() {
super.initState();
headlessWebView = new HeadlessInAppWebView(
initialUrlRequest: URLRequest(URL:
Uri.parse("https://example.com/")),
initialOptions: options,
/*InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(),
),*/
shouldOverrideUrlLoading: (controller, navigationAction) async {
var uri = navigationAction.request;
headlessWebView.webViewController.loadUrl(urlRequest: uri);
return NavigationActionPolicy.ALLOW;
},
onWebViewCreated: (controller) {
print('HeadlessInAppWebView created!');
},
onConsoleMessage: (controller, consoleMessage) {
print("CONSOLE MESSAGE: " + consoleMessage.message);
},
onLoadStart: (controller, url) async {
print("onLoadStart $url");
setState(() {
this.url = url.toString();
});
},
onLoadStop: (controller, url) async {
print("onLoadStop $url");
String jsscript =
"javascript:(function() { document.getElementById(\"text_feild\").value ='" +
"sometext" +
"';document.getElementById(\"submit\").click();})();";
await headlessWebView.webViewController
.evaluateJavascript(source: jsscript);
var result = await headlessWebView.webViewController.evaluateJavascript(
source:
"javascript:document.getElementsByTagName('a')[5].getAttribute('href').outerHTML;");
log(result.toString());
htmlCode = result.toString();
},
onUpdateVisitedHistory: (controller, url, androidIsReload) {
print("onUpdateVisitedHistory $url");
setState(() {
this.url = url.toString();
});
},
);
我在日志中收到错误(result.toString()); 它始终为空。