漫画村のreCaptchaを突破したい
受付中
回答 5
投稿
- 評価
- クリップ 1
- VIEW 559
漫画村のスクレイピングをしようとしています
技術的好奇心と、セキュリティのユニークさで、漫画村を調べており、このサイトをスクレイピングして全体のコンテンツの総量や特徴を明らかにしたいと考えています。
その為、スクレイパーを2つ作成し、幅優先探索でスクレイピングするプログラム(1)と、漫画などのコンテンツのURLを解析するプログラム(2)の二種類に分けました。
(2)はseleniumとchrome-headlessを用い、ユーザのように振る舞うようにしているのですが、ここでGoogleのreCaptchaを利用されているサイトであるため、なかなか思うようにスクレイピングできません。
seleniumの挙動と、reCaptchaの仕様などの断片を寄せ集めてやったのですが、うまくチェックボックをクリックしたことになりません。
コードを載せます。長いですがご査収いただけると幸いです。
url
options = Options()
options.add_argument('--headless')
options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")
driver = webdriver.Chrome(chrome_options=options,executable_path='/usr/bin/chromedriver')
return_chunk = dict()
ha = hashlib.sha256(bytes(url, 'utf8')).hexdigest()
print(url)
try:
driver.get(url)
time.sleep(2.0)
for i in range(200):
if i == 0:
action = webdriver.common.action_chains.ActionChains(driver)
el=driver.find_elements_by_xpath("//body")[0]
action.move_to_element_with_offset(el, 5, 100)
action.click()
action.perform()
time.sleep(3.)
html = driver.page_source
soup = bs4.BeautifulSoup(html, 'lxml')
for img in soup.findAll('img'):
#print(img)
if img.get('id') is not None and img.get('src') != '':
try:
os.mkdir(f'imgs/{ha}')
except:
...
id = img.get('id')
src = img.get('src')
open(f'imgs/{ha}/{id}', 'w').write( src )
try:
os.mkdir(f'sss/{ha}')
except:
...
# もしキャプチャがあれば、キャプチャをクリックする
try:
recaptchaFrame = WebDriverWait(driver, 7).until(
EC.presence_of_element_located((By.TAG_NAME ,'iframe'))
)
frameName = recaptchaFrame.get_attribute('iframe')
driver.switch_to_frame(frameName)
time.sleep( random.randint(3, 10)/10.0 )
# driver.find_element_by_class_name('recaptcha-checkbox-checkmark').click()
# driver.execute_script("$('#recaptcha-anchor').attr('aria-checked','true');")
CheckBox = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID ,"recaptcha-anchor"))
)
time.sleep( random.uniform(1.0, 2.0) )
hover = ActionChains(driver).move_to_element(CheckBox)
hover.perform()
time.sleep( random.uniform(0.5, 0.7) )
clickReturn= CheckBox.click()
print('\n\r after click on CheckBox... \n\r CheckBox click result: ' , clickReturn)
time.sleep(8.0)
print(f'handle captcha')
except Exception as ex:
print(f'No recaptcha! {ex}')
...
driver.switch_to_default_content()
driver.save_screenshot(f'sss/{ha}/{ha}_{i}.png')
action = webdriver.common.action_chains.ActionChains(driver)
el=driver.find_elements_by_xpath("//body")[0]
action.move_to_element_with_offset(el, 5, 100)
action.click()
action.perform()
time.sleep(2.)
except Exception as ex:
print(ex)
driver.quit()
突破する方法をご存知であればおしえてくださいませ
どうぞよろしくお願いします
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+6
なぜそのようなモノが設置されているか、ということを考えると、こういうところで質問/回答していくのは不適切である、とおもわれますが。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+3
クローラを作ってアクセスしたら業務妨害で逮捕されたという事例もあります(クローラ 図書館 でググってみてください)。
まずはアクセスする先の運用者・管理者に了解を得てからにすることをお勧めします。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
こんな質問をしていると、善意のある第三者に通報されますよ。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
あまり褒められた内容ではありませんが、ホワイトハッカーはアタックの知識も持ってますので、
知識欲のままに色々と勉強する事自体は良い事だと思います。
探したらなんかできそうですね。
英語の記事を調査していけば解決するかもしれません。
http://scraping.pro/recaptcha-solve-selenium-python/
雑な意訳
- selenium + pythonで突破出来た
- 画像テストがマジ無理ゲー、突破率は30%弱
例えば一旦画像ファイルとしてスクショをユーザーに返して、
答えを記入させるような仕組みを用意するように改造すれば突破出来ると思います(良いか悪いかは別にして)
他の方法として思いついただけで出来るかどうかは分かってませんが、
Chromeを普通に起動して認証を突破して、ヘッドレスモードでそのセッションを受け継ぐという手法は出来ませんかね?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
突破できたらreCaptchaを設置している意味ないと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
91.08%
質問への追記・修正、ベストアンサー選択の依頼
2018/03/18 21:43
複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。