3

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

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

我最初认为我可以处理一些套接字代码的必要交互。我最初的单次运行案例运行成功(我能够登录、发布内容、回复查询等),但是尝试一起运行所有内容都不起作用(服务器无法识别我的请求,以及各种其他错误)。我做了一些非常糟糕的 cookie 跟踪,我将套接字从 80 切换到 443 以进行 SSL 通信,我生成自己的数据包以发送到社交网络服务器,因为这是我第一次尝试网络交互,所以我离我还很远深度。我更喜欢跟踪 cookie、处理 SSL 通信、处理一般通信问题等的集成解决方案。基本上我希望我可以给出一个按钮的 X、Y 坐标(或从页面获取按钮列表,找到我想要的那个) ,

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

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

对于上下文,我正在发送典型的 html 页面调用以及自定义数据包调用(并解析结果)

谢谢您的帮助

4

3 回答 3

1

我建议您使用以下两条路线之一:

选项 1: 使用Apache Http 组件库。我发现这很容易用于将表单数据发送到 Web 服务器。它支持 SSL 和 cookie,尽管我没有为此使用它。我唯一遇到的问题是我似乎无法让它通过代理服务器进行通信。请参阅我发布的关于此的问题。 但只要你不通过代理,我就会给图书馆一个热情洋溢的推荐,我在上面的链接中发布的代码显示了它是多么容易使用。这是将表单数据发送到 Web 服务器的代码示例:

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: JavaFX 附带一个功能齐全的 Web 浏览器,称为 Web 视图。您可以通过编程方式与它进行交互,这在 Java Spotlight Podcast最近的一期中进行了讨论。

于 2012-07-05T23:44:39.947 回答
0

您可以将 env.rhino.js 嵌入到您的 Java 应用程序中。

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

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

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


此外,我很喜欢 Thorn 对 JavaFX Web 组件的建议。但是,如果您不需要显示任何视觉效果,您可能只需要WebEngine而不需要 WebView。

于 2012-07-06T00:18:13.973 回答
0

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

我会提醒你,让它工作起来可能是一个陡峭的学习曲线……需要大量神秘的胶水代码,但是一旦你启动并运行它就很好了。

于 2012-07-06T00:28:57.593 回答