『壹』 java中如何點擊按鈕跳轉到網頁(在瀏覽器中打開)
Desktop desktop = Desktop.getDesktop();
desktop.browse(new URI("URL地址"));
這個是用你默認的瀏覽器 打開指定超鏈
『貳』 如何用JAVA爬取AJAX載入後的頁面
普通的爬取是抓不了js的之後的數據的 可以用phantomjs或者htmlUnit實現
附上phantomjs示列代碼
package cn.wang.utils;
import java.util.Random;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.CookieManager;
import com.gargoylesoftware.htmlunit.;
import com.gargoylesoftware.htmlunit.WebClient;
public class htmlUnitUtils {
static WebClient webClient = null;
static Random random = new Random();
static{
//1.創建對象
webClient = new WebClient(BrowserVersion.CHROME);
//2.設置參數
//啟動js
webClient.getOptions().setJavaScriptEnabled(true);
//關閉css渲染
webClient.getOptions().setCssEnabled(false);
//啟動重定向
webClient.getOptions().setRedirectEnabled(true);
//設置連接超時時間 ,這里是10S。如果為0,則無限期等待
webClient.getOptions().setTimeout(1000 * 15);
//啟動cookie管理
webClient.setCookieManager(new CookieManager());
//啟動ajax代理
webClient.setAjaxController(new ());
//js運行時錯誤,是否拋出異常
webClient.getOptions().(false);
//設置瀏覽器請求信息
webClient.addRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
webClient.addRequestHeader("Accept-Encoding", "gzip, deflate");
webClient.addRequestHeader("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2");
webClient.addRequestHeader("Connection", "keep-alive");
webClient.addRequestHeader("Upgrade-Insecure-Requests", "1");
}
public static void runJs(String url){
try {
webClient.addRequestHeader("User-Agent", Constant.useragents[random.nextInt(Constant.useragents.length)]);
//等待js渲染執行 waitime等待時間(ms)
webClient.waitForBackgroundJavaScript(1000 * 10);
//3.獲取頁面
webClient.getPage(url);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(webClient != null){
webClient.close();
}
}
}
public static void main(String[] args) {
runJs("http://www.gou.hk/");
System.setProperty("phantomjs.binary.path", "D:\\works\\tool\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
}
}
『叄』 如何用htmlunit向伺服器javascrtipt提交數據和得到運行結果
看了下你的網站,你的目的應該是測試按下搜索按鈕之後顯示的結果網頁裡面的內容是否符合預想吧,其實htmlunit本身相當於模擬了一個瀏覽器,所以你不需要分別執行那幾個javascript,只要用htmlunit的webclient用你的地址裝入網頁(這時候他會自動裝入需要的javascript並執行),然後用你會得到一個htmlpage對象,從裡面找到需要填值的input對象,設置參數,然後找到搜索按鈕,模擬點擊即可,然後webclient會像真正的瀏覽器一樣做submit,並更新他內部的網頁數據,之後你只要在更新過的htmlpage對象中尋找預想結果應該生成的網頁對象並判斷其值是否正確即可。
我沒有用過python版的htmlunit,我用的是java版,但用法應該類似,你也可以參考下面的這個網頁,當然他只做到了submit,之後的對結果的判斷做法是類似的,也可以用你上面寫的通過xpath到結果網頁裡面尋找的方法。
http://blog.csdn.net/xuweilinjijis/article/details/8984290
『肆』 Java htmlunit click 方法點擊沒反應怎麼回事
解決思路如下:
第三個tr點擊的時候其實是有反應的 是有向伺服器請求數據的 不過不知道為啥htmlunit沒有給我做修改頁面代碼的操作 不過既然有發request 那就會有response 既然有response response里就一定有我要的數據
首先先:
MainService.page = subGroup.getValue().click(); //模擬點擊 向伺服器發送請求 用一個HtmlPage對象接著
WebResponse res = MainService.page.getWebResponse(); //獲取最近請求的響應
String html = res.getContentAsString(); //將響應變為字元串
接下來變為字元串之後 就可以做想做的操作了 因為我只是要一個URL地址 所以 接下來我做了切割字元串的操作 得到我要的url
int endNum = html.indexOf(subGroup.getValue().asText()); //操作字元串 拿到url
String str = html.substring(0, endNum);
int beginNum = str.lastIndexOf(URL的特有起始欄位);
String str2 = html.substring(beginNum, endNum);
int buffer = str2.length()-str2.indexOf("\"");
String url = html.substring(beginNum, endNum-buffer);
因為網頁代碼的緣故 我有一些特別的操作 不過上面幾行代碼就是從response里獲得url的過程 這個過程要根據網頁的不同具體分析的
接下來只要將得到的url送給getPage方法就能得到正常的頁面了
MainService.page = wc.getPage(url);