【问题标题】:Cannot get specific content off of website无法从网站上获取特定内容
【发布时间】:2013-07-09 17:34:18
【问题描述】:

我遇到了无法将 URL 放入字符串生成器的问题。我在这里想要完成的只是获取页面的特定部分。这是我试图从中获取内容的网页:

http://www.google.com/finance/company_news?q=CURRENCY%3AUSD&ei=hYbQUcC3LJS80QHnDA

这是我只想在我的 WebView 中显示的网站部分:

http://oi44.tinypic.com/2ilnhwi.jpg

这是我的代码:

public class WebClient extends WebViewClient {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
}
@Override
public void onPageFinished(WebView view, String url) {
    StringBuilder builder = new StringBuilder("");
    builder.append("javascript:document.getElementById('gb')    .style.visibility= 'hidden';");
    builder.append("document.getElementById('gb')    .style.display   = 'none'  ;");
    builder.append("document.getElementById('appbar').style.visibility= 'hidden';");
    builder.append("document.getElementById('appbar').style.display   = 'none'  ;");
    builder.append("document.getElementById('gf-nav').style.visibility= 'hidden';");
    builder.append("document.getElementById('gf-nav').style.display   = 'none'  ;");
    view.loadUrl(builder.toString());
}
}

private void AddListenerOnButton() {
spinner = (Spinner) getView().findViewById(R.id.spinner);
final WebView webView = (WebView) getView().findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setRenderPriority(RenderPriority.HIGH);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setBuiltInZoomControls(true);

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        String text1 = spinner.getSelectedItem().toString().trim();
        WebClient wc = new WebClient();
        if (text1.equals("US Dollar - USD")) {
            //webView.loadUrl("http://www.google.com/finance/company_news?q=CURRENCY%3AUSD&ei=hYbQUcC3LJS80QHnDA");
            wc.onPageFinished(webView, "http://www.google.com/finance/company_news?q=CURRENCY%3AUSD&ei=hYbQUcC3LJS80QHnDA");
            wc.shouldOverrideUrlLoading(webView, "http://www.google.com/finance/company_news?q=CURRENCY%3AUSD&ei=hYbQUcC3LJS80QHnDA");
        }
}

我已经尝试了一切,但整个网页仍然显示。我究竟做错了什么?是不是还有什么问题?任何帮助将不胜感激。

【问题讨论】:

  • 你的javascript被执行了吗? (使用alert() 进行测试)是否有可能在站点加载完成之前执行您的javascript 代码?
  • 我不明白你在说什么。也许你把代码放上去,我就明白了。
  • 如果在StringBuilder builder = new StringBuilder(""); 之后添加builder.append("javascript:alert('Hello World');"); 会发生什么你能在你的WebView 中看到“Hello World”消息吗?
  • 不,它不起作用。

标签: java javascript android


【解决方案1】:

我对你的代码有点困惑。看起来您正在尝试使用某种 Javascript 技巧来仅解析出您想要的数据(如果我错了,请纠正我)。问题是 javascript 是浏览器端,所以它没有在你的页面抓取器中运行。这里有几个选项

1) 看起来您实际上想要解析出一些信息并将其重新显示在您的网站上。您是否考虑过使用

之类的方式获取页面 HTML
    url = new URL("http://www.your.www");
    br = new BufferedReader(new InputStreamReader(url.openStream()));

然后使用 jsoup 之类的东西来解析你想要的?

2) 您可以控制 WebView specs here 的大小和比例。如果您只想在自己的页面中显示其他人的页面,那么查看 setPadding setScaleX/Y 可能是一个不错的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2021-03-04
    • 1970-01-01
    • 2018-10-16
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多