使用Android在网页上抓取动态内容(JavaScript)

时间:2014-05-15 13:15:36

标签: java javascript android web-scraping

作为自动填充流程中某些字段的一个步骤,我需要抓取一个由JavaScript动态填充其有趣内容的URL。

根据汽车牌照,我可以在government website上查找信息,设置选项和值并提交。

结果页面将在不同的标签中保存所需的内容,因此我还必须浏览这些内容。 (抱歉无法直接链接到这个,但选择“Registreringsnummer”,使用“YN28579”作为值,然后按“Søg”将转到该页面。)

我在另一个Activity中使用WebViewClient完成了这项操作,因此可以直接在Android手机/平板电脑上浏览网站。但是在这个其他Activity中,我不想显示生成的页面只是刮掉一些数据项。

以下是我使用WebViewClient完成的工作:

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    ((Button)findViewById(R.id.btnBack)).setVisibility(View.VISIBLE);

    wv = (WebView) findViewById(R.id.wv);
    reg = getIntent().getStringExtra("reg");

    wv.getSettings().setJavaScriptEnabled(true);
    wv.setWebViewClient(new WebViewClient() {
        private ProgressDialog pd;
        private int count = 0;

        @Override
        public void onPageFinished(WebView view, String url) {
            if (count==1) {
                view.loadUrl("javascript:document.getElementById('regnr').checked=true;"
                        +"document.getElementById('soegeord').value='"+reg+"';"
                        +"document.getElementById('searchForm').submit();"
                        +"DMR.WaitForLoad.on();");
            } else if (count>=2) {
                view.loadUrl("javascript:document.body.innerHTML " +
                        "= '<div class=\"tabNav\">'+document.getElementsByClassName('tabNav')[0].innerHTML+'</div>';" +
                        "document.getElementsByClassName('h-tab-content')[0].style.width='320px';" +
                        "document.getElementsByClassName('h-tab-btns')[0].style.width='320px';" +
                        "document.getElementsByClassName('h-tab-btns')[0].style.height='45px';" +
                        "document.getElementsByTagName('ul')[0].style.display='inline';" +
                        "document.head.appendChild='<meta name=\"viewport\" content=\"width=device-width\">';" +
                        "document.body.style.minWidth ='300px';");
                if (pd!=null) {
                    pd.dismiss();
                }
                view.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            if (pd==null || !pd.isShowing()) {
                pd = ProgressDialog.show(SkatActivity.this, "cars.dk", "Vent venligst...", true, false);
            }

            count++;
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

    });
    wv.loadUrl("https://motorregister.skat.dk/dmr-front/appmanager/skat/dmr?_nfpb=true&_nfpb=true&_pageLabel=vis_koeretoej_side&_nfls=false");
}

我似乎无法弄清楚如何将其纳入其中 您是否将WebView设置为不可见?发现this question似乎正在沿着这些相同的路线工作,但我无法弄清楚如何隐藏这个工作的WebViewClient但可以在其他活动中使用?

0 个答案:

没有答案