使用 Java 在 javascript 个启用的网页上自动执行网络任务

Automated webtasks on javascript enabled webpages, using Java

我正在使用 Java。

基本上,我要实现的目标是能够 运行 在 Web 上自动执行任务。例如登录网站、在那里做事、填写表格、注销等。

我已经设法在没有 javascript 代码(只有 html、html 表单)的简单网站上这样做(登录并发送评论),方法是发送使用 HttpURLConnection class.

的基本 POST 和 GET 消息

问题是我遇到了一个网站,它使用 javascript 代码生成会话 cookie(在客户端)。所以发生的事情是,当您访问该站点时,javascript 代码在浏览器中执行,生成会话 cookie。这些 cookie 随每个请求一起发送,没有它们,网站将无法运行。 (就是这个网站http://www.jofogas.hu/

我无法获取这些 cookie,因为我不知道如何找出执行的 Java 脚本代码,我也不知道如何 运行 javascript 中的代码Java 然后使用该代码的结果。

回答方法:

首先我看到 set-cookie header 没有设置任何名为 ses 的 cookie,这个 cookie 神奇地出现了。您知道在 javascript 中设置一个 cookie,您调用 document.cookie。所以我抓取源代码,自动缩进,然后搜索 document.cookie。您很容易落入 setNewSessionCookie 并且您可以看到它创建了一个名为 ses.

的 cookie
function setNewSessionCookie() {
    var b = get_vid();
    var d;
    var e;
    var a;
    var c = new Date();
    c.setTime(c.getTime());
    a = getCookie("ses");
    if (!a) {
        b = get_vid();
        if (!b) {
            return
        }
        d = (new Date()).getTime();
        a = b + "_" + d
    }
    e = new Date(c.getTime() + (1000 * 60 * 15));
    document.cookie = name + "ses=" + a + ";expires=" + e.toGMTString()
}

此 cookie 设置了变量 a 的值,该值由 get_vid() 设置。

function get_vid() {
    var b;
    var a = getCookie("vsid");
    if (!a) {
        return false
    }
    if (a.search(",") == "-1") {
        b = Base64.decode(a)
    } else {
        b = a
    }
    return b.split(",")[0]
}

TL;DR: 该函数获取 vsid cookie(由 set-cookie header 发送),对其进行 base64 解码,并 return 之前的部分昏迷。接下来 ses cookie 是通过附加 "_" + (new Date()).getTime()

创建的

就我而言:

getCookie("vsid") // "ODk5NjEwMzEsMTQzNDMwNDM4Ng=="
Base64.decode(getCookie("vsid")) // "89961031,1434304386"
getCookie("ses") // "89961031_1434304048406"

我警告你关于网络抓取的法律问题,它可能违反网站使用条款(这不是我说的任何语言...)。

编辑: 问题:

Automated webtasks on javascript enabled webpages, using Java

您可能会对Selenium Project and their java driver

感兴趣