【问题标题】:Integrating anticaptcha with selenium将反验证码与硒集成
【发布时间】:2018-12-04 15:58:13
【问题描述】:

我正在使用 Selenium/Python 尝试填写表格,然后填写 recaptcha。我找到了 python-anticaptcha 并购买了 10 美元的积分,一切正常,验证码出现了,但没有任何反应。我试图寻找答案几个小时/咨询了他们的 api 和示例,但找不到任何东西。最终,验证码应该可以工作,然后网站会生成一个我正在尝试网络抓取的表格

这就是它最终的样子,但什么也没发生,大约一分钟后它通常会退出,这就是代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
from python_anticaptcha import AnticaptchaClient, NoCaptchaTaskProxylessTask
import re
import pandas as pd
import os
import time
import requests

url = "https://claimittexas.org/app/claim-search"
driver = webdriver.Safari()
driver.implicitly_wait(30)
driver.get(url)

wait = WebDriverWait(driver, 30)
result = driver.find_element_by_xpath('//*[@id="lastName"]')
driver.execute_script("arguments[0].value='Al';",result)
time.sleep(2)
result.submit()

api_key = #MYAPIKEY
site_key = '6LeQLyEUAAAAAKTwLC-xVC0wGDFIqPg1q3Ofam5M'  # grab from site

time.sleep(2)
client = AnticaptchaClient(api_key)
task = NoCaptchaTaskProxylessTask(url, site_key)
job = client.createTask(task)
job.join()
token = job.get_solution_response()
requests.post(url, data={'g-recaptcha-response': token}).text

【问题讨论】:

  • 为什么要在 SO 上创建多个配置文件来构建代码?昨天您使用另一个全新的配置文件询问了 selenium 和同一网站的问题,如 stackoverflow.com/q/51014792/8240959。你确定你的行为是合法的吗?
  • 顺便说一句,除非您想将积分赠送给所有人,否则您可能应该删除您的 api 密钥...
  • 找到答案了吗?
  • 是的,谢谢! @Volatil3
  • @ss77 你应该把答案写出来吗?

标签: python selenium web-scraping recaptcha


【解决方案1】:

在 anticaptcha.com 某人的帮助下,我解决了这个问题。

api_key = '....'
site_key = '6LeQLyEUAAAAAKTwLC-xVC0wGDFIqPg1q3Ofam5M'  # grab from site

client = AnticaptchaClient(api_key)
task = NoCaptchaTaskProxylessTask(url, site_key)
job = client.createTask(task)
print("Waiting to solution by Anticaptcha workers")
job.join()
# Receive response
response = job.get_solution_response()
print("Received solution", response)

# Inject response in webpage
driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML = "%s"' % response)

# Wait a moment to execute the script (just in case).
time.sleep(1)

# Press submit button
driver.find_element_by_xpath('//button[@type="submit" and @class="btn-std"]').click()

【讨论】:

  • 这不起作用。 anticaptcha.com 也提供了 javascript 来代替
  • 也许我的网站必须使用不同的机制。无论如何,js 注入可以适用于任何无头的人,比如 puppeteer selenium ...
  • 完美地为我工作,谢谢!顺便说一句,为什么他们的网站上没有关于这些功能的信息?我什么也没找到...
猜你喜欢
  • 2010-09-18
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 2012-10-05
  • 2021-06-17
相关资源
最近更新 更多