我想抓取一个website,要访问搜索结果,必须先用回调函数解决Recaptcha V2(见下面的截图)
Recaptcha V2 with a callback function
我正在使用名为2captcha的专用验证码解决程序。该服务为我提供了一个令牌,然后我将其插入回调函数以绕过验证码。我使用此GitHub Gist中的代码找到了回调函数,并且能够在Chrome开发工具的控制台中成功调用该函数
可以通过键入以下两个命令中的任意一个来调用该函数
window[___grecaptcha_cfg.clients[0].o.o.callback]('captcha_token')
- 或**
verifyAkReCaptcha('captcha_token')
然而,当我在Python Selenium中使用driver.execute_script()
方法调用这些函数时,我得到了一个错误。我还尝试用这个方法执行其他标准的Javascript函数(例如,向下滚动页面),我一直得到错误。这可能是因为我试图抓取的域阻止我用自动化工具执行任何Javascript。
所以,我的问题是,在我从2captcha服务获得令牌后,我如何调用回调函数?我将感谢所有我能得到的帮助。提前感谢hero(in),他/她知道如何绕过这个困难的captcha。干杯!!
一些额外的信息,以帮助我的问题:
1.* * 使用了自动化框架**--〉Python Selenium或scrappy。我觉得两种都可以
1.* * 错误消息**--〉Error message 1和Error message 2
1.* * 代码**
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from twocaptcha import TwoCaptcha
from dotenv import load_dotenv
import os
# Load environment variables
load_dotenv()
# Instantiate a solver object
solver = TwoCaptcha(os.getenv("CAPTCHA_API_KEY"))
sitekey = "6Lfwdy4UAAAAAGDE3YfNHIT98j8R1BW1yIn7j8Ka"
url = "https://suchen.mobile.de/fahrzeuge/search.html?dam=0&isSearchRequest=true&ms=8600%3B51%3B%3B&ref=quickSearch&sb=rel&vc=Car"
# Set chrome options
chrome_options = Options()
chrome_options.add_argument('start-maximized') # Required for a maximized Viewport
chrome_options.add_experimental_option('excludeSwitches', ['enable-logging', 'enable-automation'])
chrome_options.add_experimental_option("detach", True)
chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})
# Instantiate a browser object and navigate to the URL
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(url)
driver.maximize_window()
def solve(sitekey, url):
try:
result = solver.recaptcha(sitekey=sitekey, url=url)
except Exception as e:
exit(e)
return result.get('code')
captcha_key = solve(sitekey=sitekey, url=url)
print(captcha_key)
# driver.execute_script(f"window[___grecaptcha_cfg.clients[0].o.o.callback]('{captcha_key}')") # This step fails in Python but runs successfully in the console
# driver.execute_script(f"verifyAkReCaptcha('{captcha_key}')") # This step fails in Python but runs successfully in the console
1条答案
按热度按时间piv4azn71#
要解决captcha问题,我们可以使用
pyautogui
。要安装软件包,请运行pip install pyautogui
。使用它,我们可以与屏幕上显示的内容进行交互。这意味着浏览器窗口必须在python脚本执行期间可见。这是相对于其他方法的一大缺点,但另一方面,它非常可靠。在我们的例子中,我们需要点击这个框
来解决验证码,所以我们将告诉pyautogui在屏幕上找到这个框,然后点击它。
因此,将图像保存在计算机上,并将其命名为
box.png
,然后运行此代码(用缺少的代码替换...
)。