gpt4 book ai didi

java - HTMLUnit : Determine if the "login" was successful

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:13 24 4
gpt4 key购买 nike

我开发了一个脚本,其唯一目的是检查网站/服务是否已启动并运行。它的做法是,它使用 url 连接到页面并使用用户凭据登录到站点。如果登录成功则服务运行正常。

该脚本是用 Java 编写的并使用 HTMLUnit。我的问题就在这里。如何确保登录后返回的HTML页面(填写表单后点击登录/登录按钮)是登录后的“帐户主页”。换句话说,我如何确定登录操作是否成功。

这就是我现在正在做的事情。帐户页面通常有一些用户相关信息。例如,如果我登录雅虎邮件,页面右上角将显示“欢迎,用户名”,或者页面上将始终显示“撰写”或“收件箱”。我正在使用这个逻辑来测试是否成功。

这是我在测试此脚本时的观察结果。我遇到过这条规则失效的案例。

  • 有时登录后返回的页面是错误页面,要求您
    检查您输入的凭据。

  • 有时返回的页面可能会要求您打开 JavaScript 或
    在您的浏览器中启用 cookie。

  • 我遇到过一个情况,服务器返回的页面已经被相同的预登录页面(没有解释原因)

  • 某些网页本质上是动态的,因此内容会发生变化时。在这种情况下,关键字搜索可能会导致错误
    否定。这就是为什么搜索字符串是否存在的逻辑铰链
    纯粹取决于“搜索字符串/关键字”的选择。

我想要表达的观点是,预先为这些情况进行编码是不现实的。

我尝试比较登录前和登录后页面的网址,但发现了
有很多情况两者是相同的。因此,即使这种方法也不是结论性的。

我需要一种确定的方法来确定登录是否成功。我不是专业的网络开发人员。服务器是否会在新页面中返回任何可以解析的状态代码? HTMLUnit 是否有一定的能力来测试成功和失败。

感谢您的帮助/评论。谢谢!

最佳答案

嗯...这是一个棘手的问题。这是因为您无法控制服务器。如果您要求 A,您可能会收到 A,但您应该准备好收到 B、C 和 D...并且您可能会错过 E。

I need a sure shot way of determining if the login was successful.

根据您的评论,查找“Welcome ”字符串应该是很确定的。换句话说(更具程序性),如果结果页面中有该字符串,那么您就已登录。您一定会成功。

现在,您提到过在某些情况下您尝试登录但没有收到该字符串。在这些情况下,根据您的示例,您几乎应该始终不登录。

但是,正如您所说,他们可以将该字符串从“欢迎,<用户名>”更改为“你又来了!”你会得到假阴性结果。然而,应用这种逻辑不太可能出现误报。

那么,有什么方法可以 100% 成功猜测用户是否登录,并且 100% 成功猜测用户是否未登录呢?不,没有。理解这一点的最简单方法是以类似人类的方式使用网络:

场景1:

  1. 尝试登录
  2. 您会看到一个红色标签,上面写着“用户名和密码不正确”
  3. 您推断您尚未登录。您是对的

场景 2:

  1. 尝试登录
  2. 您会看到“欢迎<用户名>”
  3. 您推断您已登录。您是对的

场景 3:

  1. 尝试登录
  2. 您收到“启用 javascript”消息
  3. 您推断您尚未登录。然而,这恰好只是服务器的建议,您实际上已登录。您刷新页面,然后看到“欢迎。所以在这里您作为一个人失败了

场景 4:

  1. 尝试登录
  2. 您超时
  3. 您推断您尚未登录。但是,登录请求到达服务器,使您登录,当服务器用 HtmlPage 回复时,您的互联网连接、ISP 或只是互联网中断了一毫秒,您的数据包丢失了。所以,作为一个人,你还是失败了

这些只是一些场景,但还有更多。现在想一想:即使是人类大脑也不能 100% 确定登录试验的结果……我们怎么能期望 headless 浏览器能做到这一点呢? :)

关于java - HTMLUnit : Determine if the "login" was successful,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18499889/

24 4 0