【Java】JSoupでCAPTCHA認証を回避する
お前もか、JSoup
先日、「【Java】Selenium+ChromeDriverで突然「あなたは人間ですか?」と聞かれた時は」という記事を書きました。
無事解決し、これでWebスクレイピングが捗るね!!と思っていたのですが……
今度は別のツールでSeleniumではなく、JSoupでCAPTCHA認証の罠が!!
年単位で!運用実績あるのに!!急に!使えなくなったよ!!!
実際にはJSoupでアクセスするとHTTPステータス403が返ってきて異常終了になるんすよ。
それは接続時にユーザーエージェントとか色々設定してあげれば解決はできるんですが……そうするとCAPTCHA認証に飛ばされちゃって……
それを乗り越えても取得先のURLによってはJavaScriptのシンタックスエラーが発生する……
結局JSoupだけではうまくいかなかったので、HTMLUnitを導入しました……
MavenとかGladleとか、必要に応じて依存関係を追加してください。
ソース
取得後の処理を変えたくなかったので、JSoupのDocumentクラスに取得したHTMLのデータを突っ込んでます。
WebClientクラスはHTMLUnitのやつです。
@SuppressWarnings("resource")
final WebClient webClient = new WebClient(BrowserVersion.BEST_SUPPORTED);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.setJavaScriptTimeout(10000);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setTimeout(10000);
Page page = webClient.getPage("取得先URL");
Document doc = Jsoup.parse(page.getWebResponse().getContentAsString());
ある日突然訪れるツールの死の対応で死ぬって、まあよくあるけどさあ……うん……
Author And Source
この問題について(【Java】JSoupでCAPTCHA認証を回避する), 我々は、より多くの情報をここで見つけました https://qiita.com/11295/items/adb1101856b012317815著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .