JSOUP html解析在android设备vs windows机器上给出不同的结果

时间:2016-11-24 07:27:01

标签: android jsoup

以下代码在我的计算机上的java文件上运行,提供了正确的结果" /pws/client/pdf/offers-in-store-10-11-16.pdf"

               String pdfLink= null;
                    try {


            Document doc = Jsoup.connect("http://www.dunnesstores.com/offer20/food-wine/fcp-category/home").get();
            Element links = doc.select("a[title=\"Download offers in store\"]").first();
            System.out.println(links.attr("href"));


        } catch (IOException e) {
            //e.printStackTrace();
        }

然而,当我在我的Android设备上运行代码时,按下按钮激活它的应用程序,我得到一个空指针异常" pdfLink = links.attr(" href" );"所以它找不到链接" /pws/client/pdf/offers-in-store-10-11-16.pdf"无论出于何种原因。在我的Android应用程序中,代码是在按钮的onclick监听器上,我已经逐步完成代码,它确实激活了点击并运行正确的代码行,但无论出于何种原因,JSOUP都没有找到链接。下面是android代码

            public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btnFetchData = (Button) findViewById(R.id.buttonTest);
    btnFetchData.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            new FetchWebsiteData().execute();


        }
    });

}
private class FetchWebsiteData extends AsyncTask<Void, Void, Void> {

    private String pdfLink = "didnt work";


    @Override
    protected void onPreExecute() {
        super.onPreExecute();


    }

    @Override
    protected Void doInBackground(Void... params) {
        try {

            Document doc = Jsoup.connect("http://www.dunnesstores.com/offer20/food-wine/fcp-category/home").get();
            //Elements links = doc.select("a[title=\"Download offers in store\"]");
            Element links = doc.select("a[title=\"Download offers in store\"]").first();
            pdfLink=links.attr("href");


        } catch (IOException e) {
            //e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        TextView txttitle = (TextView) findViewById(R.id.resultTextView);
        txttitle.setText(pdfLink);

    }

}

   }

1 个答案:

答案 0 :(得分:1)

移动浏览器用户代理与桌面浏览器不同;因此,HTML响应不同。为了获得相同的结果,您必须设置桌面用户代理。改变这一行:

Document doc = Jsoup.connect("http://www.dunnesstores.com/offer20/food-wine/fcp-category/home").get();

为:

Document doc = Jsoup.connect("http://www.dunnesstores.com/offer20/food-wine/fcp-category/home").userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0").get();