使用 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
感兴趣
我正在使用 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
.
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
感兴趣