1. 程式人生 > >Android Webview JS互動 自動點選遇到的問題

Android Webview JS互動 自動點選遇到的問題

這篇文章主要是記錄,在webview中實現自動點選按鈕,和內容填充。遇到一些問題,希望能對你有所幫助

Webview 與 JS互動:

下面的JS程式碼實現的功能是:點選帳號登陸,輸入賬號密碼,登陸

String js = "javascript:{document.getElementById('switcher_plogin').click();" +
                "document.getElementById('u').value = '" + QQ + "';" +
                "document.getElementById('p').value='"
+ pwd + "';" + "document.getElementById('login_button').click();};";

在 Android 應用的webview中始終報錯,

報錯:

Uncaught TypeError: Cannot read property 'click' of null

找不到switcher_plogin這個控制元件,但是在網頁能看到這個控制元件

網上看了很多答案,大部分說是新增下面的程式碼

WebSettings settings = webView.getSettings();
settings.setDomStorageEnabled(true);

但是我添加了,這個設定後,依舊是沒有效果

分析:

問題一:

在網頁端使用上面的js程式碼,可以實現想要的效果。但是需要在console中選擇對應的iframe,否則也是出現同樣的錯誤
在這裡插入圖片描述

我把這個網址在postman請求一下,看到返回的程式碼,果然是沒有switcher_plogin,但是介面上有顯示這個控制元件。是因為這個iframe是在另一個網址請求返回的。

解決:

每一個iframe都有一個window物件,也就有document物件,想對其中的控制元件進行操作,就需要這個document。

那順理成章就應該是獲取這個iframe的document,進行操作

window.frames[
"iframe的name值"].document.getElementById("iframe中控制元件的ID").click();

問題二:

在獲取到控制元件後,在執行click()操作,報錯了

在這裡插入圖片描述

Uncaught DOMException: Blocked a frame with origin "https://graph.qq.com" from accessing a cross-origin frame.
    at <anonymous>:1:56

因為這個iframe和主介面的,不同源,所以互相不能進行訪問,這是瀏覽器進行的限制

解決:

因為這個html和js檔案,我無法修改,所以想通過這種方式實現我的需求,是不可能了。打算換一種思路,Android 基於座標的模擬點選等

如果你可以修改html和js檔案,通過跨域,是可以實現需求的。可參考這篇文章詳解js跨域問題

參考: