溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用Android爬蟲怎么模擬一個登錄功能

發(fā)布時間:2021-01-21 15:59:40 來源:億速云 閱讀:171 作者:Leah 欄目:移動開發(fā)

這篇文章將為大家詳細講解有關(guān)使用Android爬蟲怎么模擬一個登錄功能,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

實例代碼:

package com.yasin;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;


import org.junit.Test;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;

public class AutoLogin {

  String url = "http://172.16.10.3/";

  @Test
  public void run(){

    try{
      WebClient webClient = new WebClient(BrowserVersion.CHROME);
      //htmlunit 對css和javascript的支持不好,所以請關(guān)閉之
      webClient.getOptions().setJavaScriptEnabled(false);
      webClient.getOptions().setCssEnabled(false);
      HtmlPage page = (HtmlPage)webClient.getPage(url);

      List<HtmlForm> forms = page.getForms();
      HtmlForm form = forms.get(0);

      HtmlTextInput name = form.getInputByName("DDDDD");
      name.setValueAttribute("/*填寫你的賬號*/");
      HtmlPasswordInput pass = form.getInputByName("upass");
      pass.setValueAttribute("/*你的密碼*/");
      HtmlSubmitInput ok = form.getInputByName("0MKKey");
      System.out.println(pass.toString());
      ok.click();
    }catch(Exception e){
      System.out.println(e.toString());
    }

  }
}

于是接著調(diào)研,發(fā)現(xiàn)利用jsoup可以在android運行起來,不過這個庫能抓取網(wǎng)頁中的內(nèi)容,也能進行賦值操作,但不支持模擬點擊事件,網(wǎng)上有好多例子,是利用第一次訪問獲取cookie,然后把賬號密碼再給Post到服務(wù)器,完成模擬登陸??梢晕覀兊男>W(wǎng)竟然沒有使用cookie,于是我只能抓包看看post的data有什么,然后把data直接通過post發(fā)送,不過不知道我們校網(wǎng)密碼的加密的方式,所以填寫密碼需要先去抓包,抓到自己賬號的密文,然后放到data中直接發(fā)送。成功了!

核心代碼:

public void login() throws IOException{
    Map<String,String> datas = new HashMap<String,String>();

    Connection con = Jsoup.connect("http://172.16.10.3/");
    con.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");//配置模擬瀏覽器
    Response rs= con.execute();//獲取響應(yīng)
    Document doc = Jsoup.parse(rs.body());

    datas.put("DDDDD", "/*自己的賬號*/");
    datas.put("upass", "/*自己密碼的密文,需抓包獲取*/");
    datas.put("R1", "0");
    datas.put("R2", "1");
    datas.put("0MMKey", "123456");
    System.out.println(datas.toString());
    Connection con2=Jsoup.connect("http://172.16.10.3/");
    con2.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
     //設(shè)置cookie和post上面的map數(shù)據(jù).cookies(rs.cookies())
    Response login=con2.ignoreContentType(true).method(Method.POST).data(datas).execute();

    Message msg = new Message();
    msg.what = 1;
    mHandler.sendMessage(msg);


  }

抓包方式:

使用Android爬蟲怎么模擬一個登錄功能

點擊登錄后快速停止監(jiān)聽,獲取form data,然后把data中的值填上就好了。

總的來說,如果只是單純抓取網(wǎng)頁內(nèi)容android這一塊利用jsoup還是能實現(xiàn)的,但不支持按鈕的點擊操作;Htmlunit API更好用,也能模擬點擊事件,不過javax android并不支持,但服務(wù)器還是可以用來抓取數(shù)據(jù)的。

關(guān)于使用Android爬蟲怎么模擬一個登錄功能就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI