【问题标题】:Jsoup connect(): bypass google captchaJsoup connect():绕过谷歌验证码
【发布时间】:2016-08-19 04:08:20
【问题描述】:

我做了一个小应用程序,我必须根据关键字检索 URL。 这是代码:

  Elements doc = Jsoup
        .connect(request)
        .userAgent(
          "Mozilla 5.0 (Windows NT 6.1)")
        .timeout(5000).get().select("li.g>h3>a");


        for (Element link : doc) {

              String url = link.absUrl("href"); 
            try {
              url = URLDecoder.decode(url.substring(url.indexOf('=') + 1, url.indexOf('&')), "UTF-8");
            } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
              e.printStackTrace();
            }



            if(!url.startsWith("http")) 
                continue; // Ads/news/etc.
            else if(url.contains("/pdf/"))
                continue;
            else if(url.contains("//github.com/"))
                continue;


            res.add(url);
        }

只是得到以下错误:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=503, URL=http://ipv4.google.com/sorry/IndexRedirect?continue=http://www.google.com/search%3Flr%3Dlang_en....
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:435)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:446)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:410)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:164)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:153)
at sperimentazioni.Main.getDataFromGoogle(Main.java:327)
at sperimentazioni.Main.getURLs(Main.java:164)
at sperimentazioni.Main.main(Main.java:485)

明明是验证码google,怎么绕过?

【问题讨论】:

  • 这就是验证码存在的原因。阻止像您的代码这样的非人类。我认为没有人会帮助你解决它......
  • 可以使用其他搜索引擎吗?如果有,是哪一个?
  • 我猜所有人都会在一定程度上做到这一点。虽然抓取可能不是解决这个问题的方法。你会想要使用他们的官方 API。必应可以工作:bing.com/developers/s/APIBasics.html

标签: java jsoup


【解决方案1】:

以下逻辑适用于我:

Document doc =
    Jsoup.connect(request)
         .userAgent("Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)")
         .timeout(5000).get();

Elements links = doc.select("a[href]");
for (Element link : links) {

    String temp = link.attr("href");
    if (temp.startsWith("/url?q=")) 
        result.add(temp);

}

【讨论】:

  • 这个答案将通过一些解释如何解决问题得到改进。
  • 哈哈,我只假设它是模仿 googlebot 并且 google captcha 通过 xD 传递它
【解决方案2】:

您无法绕过它,但您可以使用 3rd 方服务进行 CPATCHA 识别并发布正确答案。检查DeatchByCaptcha.com

【讨论】:

    【解决方案3】:

    解决此问题的唯一方法是向用户显示验证码,然后从响应标头中保存 cookie。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2012-03-02
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多