¿Puede Jsoup simular presionar un botón?

¿Puede usar Jsoup para enviar una búsqueda a Google, pero en lugar de enviar su solicitud a través de “Búsqueda de Google”, use “Me siento afortunado”? Me gustaría capturar el nombre del sitio que se devolverá.

Veo muchos ejemplos de cómo enviar formularios, pero nunca una forma de especificar un botón específico para realizar la búsqueda o el envío del formulario.

Si Jsoup no funciona, ¿qué haría?

Según la fuente HTML de http://google.com, el botón “Tengo suerte” tiene el nombre de btnI :

  

Entonces, basta con agregar el parámetro btnI a la cadena de consulta (el valor no importa):

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

Entonces, este Jsoup debería hacer:

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

Sin embargo, esto dio un error 403 (Prohibido) .

 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) 

Quizás Google estaba olfateando el agente de usuario y descubriendo que era Java. Entonces, lo cambié:

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

Esto produce (como se esperaba):

El código BalusC

Sin embargo, el 403 es una indicación de que Google no está necesariamente contento con bots como ese. Es posible que tenga (temporalmente) prohibido el IP cuando lo hace con demasiada frecuencia.

Intentaría HtmlUnit para navegar a través de un sitio, y JSOUP para raspar

Sí, puede hacerlo, si puede averiguar cómo se realizan las consultas de búsqueda de Google. Pero esto no está permitido por Google, incluso si tuviera éxito con eso. Debes usar su API oficial para realizar consultas de búsqueda automáticas.

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