2016-11-19 72 views
2

我需要从Java网页解析HTML元素,填写表单并提交它以模拟登录。在Android中解析并执行HTML

我一直在做一点研究,这里是我使用jsoup库做的。

但是,在实现这个之后,我意识到jsoup仅用于解析并且不能执行按钮点击,例如。

在这个例子中,我需要点击submitButton元素。

try { 
    Document htmlDoc = Jsoup.connect(MY_URL).get(); 
    Element loginForm = htmlDoc.getElementById("login-form"); 
    Element usernameField = loginForm.getElementById("username"); 
    Element passwordField = loginForm.getElementById("passwd"); 
    Element submitButton = loginForm.getElementById("submit"); 

    usernameField.val(username); 
    passwordField.val(password); 

    // I need to simulate `submitButton` click so I can login 

} catch (Exception e) { 
    Log.e("TAG", e.toString()); 
} 

上午我在理解是正确的jsoup不能够这样做的?

如果是这样,有没有Android的图书​​馆可以?

我知道有很多Java库,但由于javax限制,大多数无法使用Android(例如HtmlUtil)。

+0

你想效仿浏览器还是只想发表一个表单?为什么你需要解析表单呢?毕竟,你没有从你提供的代码片段中的表单中提取任何信息。 –

+0

我不需要提取任何信息。我需要做的是验证提供的用户名和密码是否有效。如果我可以模拟点击,我可以验证提供的ID和密码是否有效。我知道有更好的方法来做到这一点,但我需要暂时以这种方式实现它 –

+0

该方法在很大程度上取决于您想要探测的网站的性质。如果它返回一个错误(例如404,403,401),您可以发布用户名和密码并查看响应。请参阅https://developer.android.com/reference/java/net/HttpURLConnection.html以获取正确的方向。如果您搜索HttpURLConnection和HTTP POST,您将获得大量有关如何将表单数据发布到URL的教程。 –

回答

0

您可以查看此链接。提供良好的answer

的步骤应该是以下几点:

  1. 获取到登录页面
  2. 使用jsoup用户名和密码解析HTML
  3. 为实际用户名和密码,
  4. 使用替换它http POST发布用户名和密码表单。
+0

看起来很有希望。我会看看。谢谢 –

+0

我试过这个例子,但是即使输入了错误的证书,它也会返回一个'200'。在浏览器中,它返回'303',所以看起来不太合适 –

+0

我甚至尝试使用名为'Postman'的Chrome扩展来完成同样的确切任务,并且返回一个'200'。我想知道用户何时没有输入正确的密码。 '303'是我正在寻找的响应,所以我可以区分成功登录尝试和失败登录尝试 –