问题 Jsoup可以模拟按下按钮吗?


您可以使用Jsoup向Google提交搜索,但不是通过“Google搜索”发送您的请求,而是使用“我感觉很幸运”吗?我想捕获将返回的网站的名称。

我看到很多提交表单的例子,但从来没有办法指定一个特定的按钮来执行搜索或表单提交。

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


12722
2017-09-22 02:09


起源

你的意思是JSONP?谷歌的搜索API是 code.google.com/apis/customsearch/v1/overview.html - ceejayoz
@Ceejayoz:把你的鼠标放在上面 [jsoup] 在问题下方标记,直到弹出框显示,然后单击 信息 链接了解它。 - BalusC
@BalusC我会说这是一个公平的要求澄清,考虑到问题的内容和全部大写,单字母关闭JSOUP。 - ceejayoz
@Ceejayoz:同意。 Jsoup不应该是全封闭的。 - BalusC


答案:


根据HTML的来源 http://google.com “我很幸运”按钮的名称为 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(禁止) 错误。

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)

也许谷歌正在嗅探用户代理并发现它是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表明谷歌并不一定对这样的机器人感到满意。当您经常这样做时,您可能会(暂时)获得IP禁用。


11
2017-09-23 01:46



谢谢BalusC。这完全回答了这个问题。我看到该网址请求对Google网站而言是独一无二的。我试图弄清楚你是否可以用Jsoup编写点击特定按钮,以谷歌为例。我最好在本网站的其他问题中澄清我想要做的事情。这个问题在一个月内没有得到解答而感到沮丧,所以问了一个不同的问题,希望它能帮助我解决第一个问题。不幸的是,我的计划适得其反,我为花时间回答一个无法解决问题的问题而道歉。 - Brian


我会尝试使用HtmlUnit来浏览网站,然后使用JSOUP进行搜索


2
2017-11-28 04:01



那么如何组合使用htmlUnit和jSoup?编辑:得到它.. jSoup.parse可以解析htmlUnit给出的html字符串 - tObi


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

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


0
2017-09-22 06:12



谢谢你的回复。我只是以谷歌为例。我有一个网站,我试图使用JSOUP登录并获取一些信息。我不认为我实际上正在登录。我试图找出如何模拟一般按“登录”或“提交”按钮以确保我实际登录到该网站。对困惑感到抱歉。 - Brian