【问题标题】:Can Jsoup simulate a button press?Jsoup 可以模拟按钮按下吗?
【发布时间】:2011-11-22 10:55:54
【问题描述】:

您能否使用 Jsoup 向 Google 提交搜索,而不是通过“Google 搜索”发送您的请求,而使用“我很幸运”?我想捕获将返回的站点的名称。

我看到很多提交表单的示例,但从未指定特定按钮来执行搜索或表单提交。

如果 Jsoup 不起作用,那会怎样?

【问题讨论】:

  • 你的意思是JSONP吗? Google 的搜索 API 是 code.google.com/apis/customsearch/v1/overview.html
  • @Ceejayoz:将鼠标放在问题下方的[jsoup] 标记上方,直到出现弹出框,然后单击其中的info 链接以了解它。
  • @BalusC 考虑到问题的内容和全大写、一个字母的 JSOUP,我认为这是一个足够公平的澄清请求。
  • @Ceejayoz:同意。 Jsoup 不应该全部大写。

标签: java jsoup


【解决方案1】:

可以,如果您能够弄清楚 Google 搜索查询是如何产生的。但谷歌不允许这样做,即使你会成功。您应该使用他们的官方 API 进行自动搜索查询。

http://code.google.com/intl/en-US/apis/customsearch/v1/overview.html

【讨论】:

  • 感谢您的回复。然而,我只是以谷歌为例。我有一个网站,我正在尝试使用 JSOUP 登录并获取一些信息。我不认为我真的在登录。我试图找出如何模拟一般按下“登录”或“提交”按钮,以确保我实际登录到该站点。很抱歉造成混乱。
【解决方案2】:

根据http://google.com 的HTML 源代码,“我很幸运”按钮的名称为btnI

<input value="I'm Feeling Lucky" name="btnI" type="submit" onclick="..." />

因此,只需将btnI 参数添加到查询字符串即可(值无关紧要):

http://www.google.com/search?hl=en&btnI=1&q=your+search+term

所以,这个 Jsoup 应该这样做:

String url = "http://www.google.com/search?hl=en&btnI=1&q=balusc";
Document document = Jsoup.connect(url).get();
System.out.println(document.title());

但是,这给出了 403 (Forbidden) 错误。

Exception in thread "main" java.io.IOException: 403 error loading URL http://www.google.com/search?hl=en&btnI=1&q=balusc
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:387)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:364)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:143)
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:132)
    at test.Test.main(Test.java:17)

也许 Google 正在嗅探用户代理并发现它是 Java。所以,我改变了它:

String url = "http://www.google.com/search?hl=en&btnI=1&q=balusc";
Document document = Jsoup.connect(url).userAgent("Mozilla").get();
System.out.println(document.title());

这会产生(如预期的那样):

BalusC 代码

然而,403 表明 Google 不一定对此类机器人感到满意。如果您经常这样做,您可能会(暂时)被 IP 封禁。

【讨论】:

  • 感谢 BalusC。这完美地回答了这个问题。我看到该 URL 请求对于 Google 的网站来说是独一无二的。我试图弄清楚您是否可以使用 Google 作为示例对 Jsoup 进行编程以单击特定按钮。我最好在本网站上的其他问题中澄清我要做什么。这个问题已经一个月没有得到回答并且很沮丧,所以问了一个不同的问题,希望它能帮助我解决第一个问题。不幸的是,我的计划适得其反,我很抱歉花时间回答一个不能解决我问题的问题。
【解决方案3】:

我会尝试用 HtmlUnit 来浏览网站,用 JSOUP 来抓取

【讨论】:

  • 那么htmlUnit和jSoup如何结合使用呢?编辑:明白了.. jSoup.parse 可以解析 htmlUnit 给出的 html 字符串
猜你喜欢
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
相关资源
最近更新 更多