簡體   English   中英

如何從HTML頁面(WebView)獲取xPath

[英]How to get xPath from html page (WebView)

如何確定通過onTouch事件在CrossWalkView(WebView)中打開的html頁面上的元素的XPATH?

在Webview組件上設置WebViewClient。

 browser = (WebView) findViewById(R.id.browser);
 browser.setWebViewClient(new InnerWebViewClient());

然后擴展WebViewClient類

private class InnerWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return super.shouldOverrideUrlLoading(view, url);
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);  
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
    }

    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

    }
}

在這里,您將獲得字符串格式的url。 Webivew的onTouch事件將首先執行onPageStarted()方法。 這樣您就可以在其中獲得Path URL。

通過使用JS解決了問題。 我到達這里的JS解決方案: 我將點擊坐標存儲在數據庫中,然后稍后重新加載它們,並在發生點擊的站點上顯示它們,如何確保它加載在同一位置?

InputStream is = getResources().openRawResource(R.raw.get_xpath);
                Scanner s = new Scanner(is).useDelimiter("\\A");
                String javascript = s.hasNext() ? s.next() : "";
                myWebView.evaluateJavascript(javascript, null);

這是我的JS代碼:

document.onclick= function(event) {
    if (event===undefined) event= window.event;                     // IE hack
    var target= 'target' in event? event.target : event.srcElement; // another IE hack

    var root= document.compatMode==='CSS1Compat'? document.documentElement : document.body;
    var mxy= [event.clientX+root.scrollLeft, event.clientY+root.scrollTop];

    var path= getPathTo(target);
    var txy= getPageXY(target);
    alert('Clicked element '+path+' offset '+(mxy[0]-txy[0])+', '+(mxy[1]-txy[1]));
}

function getPathTo(element) {
    if (element.id!=='')
        return 'id("'+element.id+'")';
    if (element===document.body)
        return element.tagName;

    var ix= 0;
    var siblings= element.parentNode.childNodes;
    for (var i= 0; i<siblings.length; i++) {
        var sibling= siblings[i];
        if (sibling===element)
            return getPathTo(element.parentNode)+'/'+element.tagName+'['+(ix+1)+']';
        if (sibling.nodeType===1 && sibling.tagName===element.tagName)
            ix++;
    }
}

function getPageXY(element) {
    var x= 0, y= 0;
    while (element) {
        x+= element.offsetLeft;
        y+= element.offsetTop;
        element= element.offsetParent;
    }
    return [x, y];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM