【问题标题】:HTML form parsing and submission in Clojure (as per Hpricot)?Clojure 中的 HTML 表单解析和提交(根据 Hpricot)?
【发布时间】:2015-09-18 10:00:30
【问题描述】:

我正在尝试找到一个高级 Clojure 库,用于发出 HTTP 和 HTTPS 请求,从响应中解析表单和链接,然后发布更新的表单或跟踪链接。理想情况下,可以自动处理重定向和 cookie(即会话)。也就是说,我想找到一些东西,我的代码可以尽可能地模仿用户从浏览器驱动 web 应用程序,而无需浏览器。

几年前,我们使用 Hpricot 和 Ruby 来完成类似的任务,但如果可能的话,我更喜欢在 Clojure 中执行此操作。根据记忆——我已经多年没有使用 Hpricot——我们能够以最小的努力做到这一切:我们能够专注于驱动应用程序的“什么”,而不是“如何”。

我找到了 clj-http https://github.com/dakrone/clj-http 但这似乎比我正在寻找的要低一级(无表单解析) - 尽管它基于 Apache HttpComponents http://hc.apache.org/httpcomponents-client-ga/ 似乎确实暴露了一个不错的,流利的,用于表单的 API http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fluent.html

Screen scraping in clojure 询问 Clojure 中的屏幕抓取问题,对此有几个很好的建议,但没有真正解决上述问题。

HTTP Kit http://www.http-kit.org/client.html 看起来它将成为上述的一个很好的基础,但不做表单解析或会话管理(据我所知)。

目前我已经转向直接从 Clojure 使用 Apache HttpComponents Java 库。任何人都可以提出更好的 - 也许更多的 Clojure 惯用 - 替代方案吗?或者他们发现在类似情况下效果很好的任何东西?我的目标是快速编写最少的代码来调查 Web 服务的问题。这不是生产代码。我主要关心的是节省时间,而不是获得“理想”的解决方案。

[背景是我试图模仿某些形式的用户行为,以便首先重现,然后尝试追踪大量遗留 Java/EJB 代码中的间歇性错误。然而,这个问题似乎只发生在几千个 POST 中一次。 (可疑的是某种形式的缓存问题。)问题的存在,但事后很容易检测到。]

【问题讨论】:

  • 你考虑过硒吗? selenium 有一个 clojure 包装器:github.com/semperos/clj-webdriver
  • 我一直在阅读 Selenium 的 Javadoc。我看不到任何方法可以在请求中提取表单、更新它们并提交更改。

标签: forms http clojure apache-httpclient-4.x


【解决方案1】:

你看过the Enlive library了吗? Here is a good tutorial就可以了。

你似乎真的有两部分在这里。第一部分是 (1) 一个类似 Selenium 的客户端,它驱动 (2) 一个网络服务器。

对于第 (1) 部分,Selenium、Enlive 或类似的东西都可以让您模拟浏览器来提交数据、读取响应并从那里响应。对于第 (2) 部分,您似乎只需要一个常规的 Clojure Web 框架,例如 Ring/Compojure(较旧且更简单)或 Pedestal(更新且更强大)。

【讨论】:

  • 对于 1) Enlive 看起来很有希望。但我理想中想要的是非常高级的东西。我希望能够执行以下操作:发出获取请求,从响应中“提取”表单(或多个表单),更新一些字段,并获得下一个响应,因为它(例如)单击按钮标记为“下一步”。顺便说一句 2) 是一个现有的遗留 Java/EJB/JBoss 系统,有一个我们正在尝试追踪的零星问题。 Selenium 看起来很有用 - 但我真的希望我的代码直接充当客户端(而不是通过驱动浏览器),正如我预期的那样,我以后可能不得不从我的代码中运行多个“客户端”。
猜你喜欢
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 2011-10-11
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多