java - Jsoup 可以模拟按钮按下吗?

标签 java jsoup

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

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

如果 Jsoup 行不通,那什么行呢?

最佳答案

根据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());

这会产生(如预期):

The BalusC Code

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

关于java - Jsoup 可以模拟按钮按下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508813/

相关文章:

java - messages.properties 取自数据库

java - 序列化和反序列化 Map<Object, Object> Jackson

java - 关于数组和文件处理的一些事情

java - Jsoup 从表内表获取数据

java - 模拟 RabbitMQ 进行测试

java - 错误: No resource found that matches the given name (at 'theme' with value '@style/Theme.Material.Light.DarkActionBar' )

java - 使用 Jsoup 以正确的格式从网页中提取相对链接

java - 过滤图片的URL路径(img src)获取文件名

java.net.SocketException : Connection reset error while html parse with Jsoup

java - 使用 JSoup 解析特定元素