首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -创建模拟浏览器

Java -创建模拟浏览器
EN

Stack Overflow用户
提问于 2012-07-06 05:33:48
回答 3查看 1.6K关注 0票数 3

我正在开发一个在社交网络上与用户互动的程序。我想要一个工具,处理大部分或所有的网络通信

我的工作包括登录网站,阅读帖子,发送回复和个人消息。

我最初认为我可以用一些套接字代码来处理必要的交互。我最初的单运行案例运行成功(我能够登录、发布内容、响应查询等),但是尝试一起运行所有东西都不起作用(服务器无法识别我的请求,各种其他错误)。我做了一些非常糟糕的cookie跟踪,我将套接字从80切换到443用于SSL通信,我生成自己的数据包发送到社交网络服务器,由于这是我第一次尝试web交互,我完全超出了我的能力范围。

我想知道是否有我可以使用的java模拟浏览器。也就是说,我可以获得页面上文本框的句柄,输入我的登录信息并执行登录过程(然后模拟浏览器将处理所有cookie,处理单个数据包,等等)

我的目标是有一个可以在我的计算机上运行的程序,它可以与社交网络上的用户交互,而不需要我方面的任何重要输入(我不希望这个程序垄断Firefox,这会阻止我在系统上使用Firefox )

对于上下文,我发送了典型的html页面调用和自定义包调用(并解析结果)。

感谢您的帮助

EN

回答 3

Stack Overflow用户

发布于 2012-07-06 07:44:40

我建议您使用以下两种方法之一:

选项1:使用Apache Http Components Library。我发现这在将表单数据发送到web服务器时非常容易使用。它支持SSL和cookies,尽管我还没有用过它。我唯一的问题是我似乎不能让它通过代理服务器进行通信。请参阅my the question I posted about this.,但只要您不是通过代理,我就会给这个库一个热情洋溢的推荐,我在上面的链接中发布的代码显示了它的易用性。下面是一个将表单数据发送到web服务器的代码示例:

代码语言:javascript
复制
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.methods.*;  //HttpHead, HttpPut, HttpGet, etc...
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.entity.*;
import org.apache.http.impl.client.SystemDefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public static void sendForm(String user, String val) throws IOException {    
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    formparams.add(new BasicNameValuePair("user", user));
    formparams.add(new BasicNameValuePair("message", val));
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
    String uri = "http://theServer.com";
    HttpPost httppost = new HttpPost(uri);  
    HttpClient httpclient = new SystemDefaultHttpClient();
    HttpResponse response = httpclient.execute(httppost);
    response.getStatusLine().toString() + "\n" +
    EntityUtils.toString(response.getEntity()));
    System.out.println(EntityUtils.toString(response.getEntity()));       
}

选项2:有一个功能齐全的web浏览器,它与JavaFX一起提供,称为web view。您可以通过编程方式与其交互,这一点在Java Spotlight Podcast的最新一期中进行了讨论。

票数 1
EN

Stack Overflow用户

发布于 2012-07-06 08:18:14

你可以使用embed env.rhino.js in your Java app

env.js是“作为脚本环境的浏览器的高度可移植的javascript实现(通常被称为‘无头’浏览器)”。

rhino实现使用rhino javascript引擎,它是用于JavaScript的Java运行时,并将随Oracle Java实现一起提供。

env.js有合理的能力,因为它使用参考html5解析器的交叉编译版本,并且可以处理充分利用jQuery库和html dom的JavaScript。

此外,我确实喜欢索恩关于JavaFX web组件的建议。但是,如果你不需要显示任何视觉效果,你可能只需要WebEngine而不需要WebView。

票数 0
EN

Stack Overflow用户

发布于 2012-07-06 08:28:58

行业标准是Selenium。它通常用于创建自动化的系统测试,但也可以在需要代码内浏览器的任何地方使用。

我要提醒你,让它工作可能是一个陡峭的学习曲线……需要相当神秘的glue code,但是一旦你启动并运行它就相当不错了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11352888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档