gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:33:08 26 4
gpt4 key购买 nike

我正在使用 Java。

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

我已经通过使用 HttpURLConnection 类发送基本的 POST 和 GET 消息,在不存在 javascript 代码(仅 html、html 表单)的简单网站上做到了这一点(登录并发送评论)。

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

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

最佳答案

回答方法:

首先我看到 set-cookie header 没有设置任何名为 ses 的 cookie 并且这个 cookie 神奇地出现了。您知道在 javascript 中,要设置一个名为 document.cookie 的 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 由 get_vid() 设置的变量 a 的值设置。

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 解码,并返回逗号之前的部分。接下来,通过附加 "_"+ (new Date()).getTime()

创建 ses cookie

以我为例:

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

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

编辑:对于问题:

Automated webtasks on javascript enabled webpages, using Java

您可能对 Selenium Project 感兴趣和他们的 java driver

关于java - 使用 Java 在启用 javascript 的网页上自动执行网络任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30832314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com