上一篇博客我們講到沒有驗證碼的登陸跳轉和信息抓取,對於部分有驗證碼登陸跳轉我們又該怎麼做到模擬登陸呢。
首先,還是先說下我們的外部庫
我們這次模擬登陸的是拉手網。
http://www.lashou.com/account/login/
然後我們查看服務器驗證碼的網址:
當然這樣查看得到的是相對地址,我們肯定要得到絕對地址才能獲取到驗證碼的圖片,下面的代碼會給出如何直接獲取絕對地址。
Po出函數
public static void downloadFile() throws IOException {
String url="http://www.lashou.com/account/login/";
//存入的文件路徑和文件名
String fileName="D:\\TDDOWNLOAD\\yz.png";
File dir = new File("D:\\TDDOWNLOAD");
if(!dir.exists())
{
dir.mkdirs();
}
Connection connection=Jsoup.connect(url);
Document document=connection.get();
String src=document.getElementsByClass("yzmimg").attr("abs:src");
//Jsoup的文件流讀取
URL url_picture=new URL(src);
InputStream inputStream =url_picture.openStream();
OutputStream out = new BufferedOutputStream(new FileOutputStream( fileName));
for (int b; (b = inputStream.read()) != -1;) {
out.write(b);
}
out.close();
inputStream.close();
}
然後我們可以看到在自己D盤的目錄下會有
接下來就是獲得輸入,我只是做個示範,所以就不把驗證碼顯示出來,JAVA可以通過Swing動態顯示這張圖片,JSP可以通過文件獲得等等,我們就在這裏寫出了。
public static String GetYZM(){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("請輸入下載下來的驗證碼中顯示的數字...");
String yzm = br.readLine();
return yzm;
}
接下來就是和上一篇博客相同的操作,我就不做演示。 最後講解一下上一期忘記講解的Cookie方面的問題。
上一篇有個代碼:
String accountCookie=connection.response().cookie("ACCOUNT");
那麼這個ACCOUNT有什麼講究呢
看圖
必須與上面的參數名完全一致才能獲取到你想要的Cookie.
至於大型網站的Cookie值有很多,如何正確的使用CookieStore,我會在後續進階篇中詳細的介紹。