【问题标题】:android how get url in page loaded- loadingandroid如何在加载页面中获取url-加载
【发布时间】:2015-02-25 21:53:27
【问题描述】:

大家好,我想知道是否有任何方法可以找到 在 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#

或者其他没有点击的东西这可能吗?

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

【问题讨论】:

  • 我想知道帮助网址”是什么意思?
  • @Raid 这是一个例子,我只是想知道网站上的一个特定网址而不点击它,例如来自 Youtube.com 页面的 mychannel 网址

标签: android webview jsoup


【解决方案1】:

在您的 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 中,在将布尔 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可以帮忙抢购

【讨论】:

  • GROSSMANN,谢谢您的回复有可能吗?
  • 感谢 Grossmann,我正在尝试测试我会告诉你它是否有效
  • if(link.contains
  • 首先祝您新年快乐 webview.load
  • @user3565993 新年快乐。我刚刚编辑了代码。现在应该可以了:-)
【解决方案2】:

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

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());
}

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

PS:你可以编辑linkPattern来过滤一些链接。

【讨论】:

  • 呃!不是很先进。无论如何,如果你从不尝试,你将永远学不会;)
  • 是的,你是对的,jsoup 很好,但我不知道如何启动它给我错误无法解析方法 java.lang.String 我正在尝试使用 JSOUPP 的 Grossmann 方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多