简体   繁体   English

如何从HTML页面(WebView)获取xPath

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

如何确定通过onTouch事件在CrossWalkView(WebView)中打开的html页面上的元素的XPATH?

Set WebViewClient on your webview component. 在Webview组件上设置WebViewClient。

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

And then extends WebViewClient Class 然后扩展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) {

    }
}

Here you will get url as in string format. 在这里,您将获得字符串格式的url。 onTouch event of Webivew will execute first onPageStarted() method. Webivew的onTouch事件将首先执行onPageStarted()方法。 So you will get your Path url there. 这样您就可以在其中获得Path URL。

Problem was solved by using JS. 通过使用JS解决了问题。 JS solution i got here: I'm storing click coordinates in my db and then reloading them later and showing them on the site where the click happened, how do I make sure it loads in the same place? 我到达这里的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);

and here`s my JS code: 这是我的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