android如何在页面加载url加载

时间:2014-12-29 17:39:28

标签: android webview jsoup

大家好我想知道是否有任何方法可以找到 在webview中加载的页面中的url 例如

webview.loadurl("stackoverflow.com") // this is url 
string aa = -webivew.geturl() //in this way in kno url in adress bar

但我想知道“帮助”的网址>> https://stackoverflow.com/questions/ask?title=android%20how%20get%20url%20in%20page%20loaded-%20loading#

或其他没有clik的东西可能吗?

我认为jsoup有办法吗? 我很困惑。

2 个答案:

答案 0 :(得分:1)

要从您的webView获取所有链接/ URL,您需要一个html解析器来迭代页面内容。 然后,您可以循环结果列表并检查它是否包含您的 Youtube频道网址或您要查找的网址。

1)您可以使用jsoup,这是一个示例(取自here):

File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

Elements links = doc.select("a[href]"); // get all "a" elements with "href"
Elements pngs = doc.select("img[src$=.png]");// get all "img" with src ending .png

Element masthead = doc.select("div.masthead").first();

2)或使用HTML Parser库。

public static List<String> getLinksOnPage(final String url) {
    final Parser htmlParser = new Parser(url);
    final List<String> result = new LinkedList<String>();

    try {
        final NodeList tagNodeList = htmlParser.extractAllNodesThatMatch(new NodeClassFilter(LinkTag.class));
        for (int j = 0; j < tagNodeList.size(); j++) {
            final LinkTag loopLink = (LinkTag) tagNodeList.elementAt(j);
            final String loopLinkStr = loopLink.getLink();
            result.add(loopLinkStr);
        }
    } catch (ParserException e) {
        e.printStackTrace(); // TODO handle error
    }

    return result;
}

3)或者创建自己的解析器,例如:

String HTMLPage; // get the HTML page as a String
Pattern linkPattern = Pattern.compile("(<a[^>]+>.+?</a>)",  Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
Matcher pageMatcher = linkPattern.matcher(HTMLPage);
ArrayList<String> links = new ArrayList<String>();
while(pageMatcher.find()){
    links.add(pageMatcher.group());
}

links ArrayList将包含页面中的所有链接。

PS:您可以修改linkPattern来过滤某些链接。

答案 1 :(得分:0)

在WebView中放置第一个客户端:WebViewClient,您将在其中调用html:

@Override
public void onPageFinished(WebView view, String url) {
   webview1.loadUrl("javascript:alert(document.getElementsByTagName('body')[0].innerHTML);");
   }

然后,再安排第二个客户:

webview1.setWebChromeClient(new MyWebChromeClient());

在WebChromeClient中,在将boolean navigationTolink声明为false后将其放入:

   @Override
   public boolean onJsAlert(final WebView view, String url, final String transfert, JsResult result) {
             if (!navigationtoLink) {
                Document html = Jsoup.parse(transfert);
                Elements links = html.select("a[href]");
                for (Element link : links) {
                    if (link.attr("href").contains("youtube.com")) { 
                    view.loadUrl(link.attr("href"));
                    navigationtoLink=true;
                }
             }

    }

This可以帮助抓取