是否有任何加载和操作外部URL的方法?

时间:2012-02-28 17:52:47

标签: java javascript http http-headers

我想加载外部内容(来自另一个域)并模拟导航,执行诸如以编程方式点击和填充表单,可能使用JQuery。

解释得更好:我需要自动导航"#34;通过3页,第一页是登录区,我应该填写登录/通过字段,然后提交。在最后一个中,我必须填写一些输入字段,再次提交,并从报告中获取所有html数据。

我正在尝试使用IFRAME和Jquery的内容(),然后我意识到由于明显的XSS安全问题我无法做到这一点。 (http://jsfiddle.net/TbMyx/4/)。

在尝试这种方式之前(客户端,js,iframe等),我也尝试过使用Java。将POST / GET请求发送到Servlet中,我也没有成功。

对此的任何想法?至少,这是可能的任务吗? 我对此有点消极,我不认为这是真的可能,根据我目前的知识,我只需要一些确认

5 个答案:

答案 0 :(得分:2)

是的,有可能。它被称为Web Scraping,并且相当常见。

如您所知,由于安全限制,使用javascript无法在客户端执行此操作。

在服务器端,您有两个选择。 a)加载实际的浏览器并像用户一样浏览网站,或b)使用无头浏览器,它基本上是一个模拟真实浏览器的库。

使用无头浏览器 一般来说,这是一种更快速,更简单的方法,但它可能不适用于依赖于javascript的复杂网站。

对于java,HTMLUnit是一个很棒的库。保持浏览器的小提琴请求/响应,因为浏览器可能会发送与HtmlUnit不同的cookie或标头。通常,如果您匹配浏览器发送的所有标头,网站将正确响应。

使用实际浏览器 仅当您使用无头浏览器的尝试失败时才使用此选项。这种方法可以像用户一样启动浏览器并浏览网站。

您可以将Selenium / WebDriver用于此目的。请注意,在服务器环境中运行浏览器实际上资源非常昂贵,并且需要更多时间。

答案 1 :(得分:1)

除非您将安全设置降低到PLEASE HACK MY BANK帐户级别,否则使用JavaScript是不可能的。

您可以像服务器上的浏览器一样,只要他们不打电话给您作为机器人。因此,您使用JAVA的帖子可能失败了,或者您没有向帖子发送正确的cookie /会话信息。获取Fiddler,并监控流量,并尝试重新创建它。

答案 2 :(得分:0)

我使用Selenium与Java中的Web表单进行交互。

设置完成后,可以轻松启动浏览器并将值插入各种输入框并以自动方式单击按钮。

答案 3 :(得分:0)

我知道现在正是你想要的,但试试硒。

答案 4 :(得分:0)

是的,你做不到。

通过更改外部内容的URL(打开的窗口,框架)可以进行导航。

如果您复制页面上的(静态)表单,并将其发布到其他域(可能定位到隐藏的iframe),则可能会填写表单。

但是你永远不会访问该其他页面的内容,可能是“报告中的html数据”或dom元素“以编程方式点击”。