‘壹’ 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);