如何单击 buster 按钮以使用 Python 和 selenium 解决 reCaptcha?
How to click the buster button to solve reCaptcha with Python and selenium?
我想使流程自动化,但需要通过验证码,为此,我决定使用名为“Buster:人类验证码求解器”的扩展程序 link to the extension.
但是我遇到但没有找到答案的问题是,当验证码出现时我无法点击实际的破坏按钮。
为了达到这一点,我将使用代码 -->
WebDriverWait(self.driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name^='a-'][src^='https://www.google.com/recaptcha/api2/anchor?']")))
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[@id='recaptcha-anchor']"))).click()
但是我好像不能点击buster图标,HTML代码如下(不好意思是图片格式)
我所做的研究是它在#shadow-root(关闭)中,这就是我无法点击或访问它的原因。然后我尝试研究,但从我发现的结果来看,没有任何效果。
(有人问过这个话题,但没有得到答案,是吗,是你!想成为第一个回答这个问题的人(至少从我所看到的)?你还在等什么?)
我的首要问题是:
也许有更好的方法(免费)绕过 reCaptcha,最好也绕过 hCaptcha?
如何单击带有硒或任何其他 python3 包的元素?
现在让我告诉你一些事情
- way1 非常基础但不是动态的;
您可以使用 python 模块来完成;此模块名称是 pyautogui
import pyautogui
pyautogui.click(x=X coordinate of the button you want to press, y=#Y coordinate of the button you want to press)
你可以问一下如何知道按钮的坐标,你可以使用pyautogui.position()
,找到坐标后在上面使用它们
注意:不要忘记当在后台时你不能点击你的按钮(这里是为什么不是动态的)
- way2 可能很难:)
我不认为这个(shadow-root) 是你不能按下按钮的原因。至于我的猜测;
据我所知,您要查找的按钮位于 iframe 内,因此您必须进入 iframe 才能单击。由于我不知道你要找的按钮的id而且我现在也没有太多时间,所以让我向你展示一下音频按钮是如何按下的(逻辑可能与你要找的按钮相同) 。您所要做的就是填写正确的id。
class Captcha:
def __init__(self):
self.option = webdriver.ChromeOptions()
self.option.add_argument('--disable-notifications')
self.option.add_argument('--mute-audio')
self.option.add_argument("user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1")
self.driver = webdriver.Chrome(options = self.option)
def start_to_bypasscaptcha(self):
self.driver.get(#URL of site)
time.sleep(5)
googleClass = self.driver.find_elements_by_class_name('g-recaptcha')[0]
outeriframe = googleClass.find_element_by_tag_name('iframe')
outeriframe.click()
allIframesLen = self.driver.find_elements_by_tag_name('iframe')
audioBtnFound = None
audioBtnIndex = -1
for index in range(len(allIframesLen)):
self.driver.switch_to.default_content()
iframe = self.driver.find_elements_by_tag_name('iframe')[index]
self.driver.switch_to.frame(iframe)
try:
print(self.driver.find_element_by_id("audio-instructions").text)
time.sleep(1)
audioBtn = self.driver.find_element_by_id('recaptcha-audio-button') or self.driver.find_element_by_id('recaptcha-anchor')
audioBtn.click()
audioBtnFound = True
audioBtnIndex = index
break
except Exception as error:
pass
time.sleep(3)
if audioBtnFound:
#do what do you want
else:
print('Button not found.')
如果你把这段代码正确地应用到你想要的按钮上但它不起作用,你是对的,shadow-root 可能是这个问题的原因。
我的代码说明;
- 使用 selenium
打开 chrome
- 前往URL
- 等待几秒钟后找到验证码
- 查找验证码框架内的所有 iframe
- 每次进入找到的 iframe 并尝试单击按钮
- 当您找到可点击的按钮时,结束循环并分配一个该按钮所属的 iframe 变量
非常认真的笔记;需要说明一下,写第二种方式并不是为了给出答案,主要是为了展示逻辑。
我想使流程自动化,但需要通过验证码,为此,我决定使用名为“Buster:人类验证码求解器”的扩展程序 link to the extension.
但是我遇到但没有找到答案的问题是,当验证码出现时我无法点击实际的破坏按钮。
为了达到这一点,我将使用代码 -->
WebDriverWait(self.driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name^='a-'][src^='https://www.google.com/recaptcha/api2/anchor?']")))
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[@id='recaptcha-anchor']"))).click()
但是我好像不能点击buster图标,HTML代码如下(不好意思是图片格式)
我所做的研究是它在#shadow-root(关闭)中,这就是我无法点击或访问它的原因。然后我尝试研究,但从我发现的结果来看,没有任何效果。
(有人问过这个话题,但没有得到答案,是吗,是你!想成为第一个回答这个问题的人(至少从我所看到的)?你还在等什么?)
我的首要问题是:
也许有更好的方法(免费)绕过 reCaptcha,最好也绕过 hCaptcha? 如何单击带有硒或任何其他 python3 包的元素?
现在让我告诉你一些事情
- way1 非常基础但不是动态的;
您可以使用 python 模块来完成;此模块名称是 pyautogui
import pyautogui
pyautogui.click(x=X coordinate of the button you want to press, y=#Y coordinate of the button you want to press)
你可以问一下如何知道按钮的坐标,你可以使用pyautogui.position()
,找到坐标后在上面使用它们
注意:不要忘记当在后台时你不能点击你的按钮(这里是为什么不是动态的)
- way2 可能很难:)
我不认为这个(shadow-root) 是你不能按下按钮的原因。至于我的猜测;
据我所知,您要查找的按钮位于 iframe 内,因此您必须进入 iframe 才能单击。由于我不知道你要找的按钮的id而且我现在也没有太多时间,所以让我向你展示一下音频按钮是如何按下的(逻辑可能与你要找的按钮相同) 。您所要做的就是填写正确的id。
class Captcha:
def __init__(self):
self.option = webdriver.ChromeOptions()
self.option.add_argument('--disable-notifications')
self.option.add_argument('--mute-audio')
self.option.add_argument("user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1")
self.driver = webdriver.Chrome(options = self.option)
def start_to_bypasscaptcha(self):
self.driver.get(#URL of site)
time.sleep(5)
googleClass = self.driver.find_elements_by_class_name('g-recaptcha')[0]
outeriframe = googleClass.find_element_by_tag_name('iframe')
outeriframe.click()
allIframesLen = self.driver.find_elements_by_tag_name('iframe')
audioBtnFound = None
audioBtnIndex = -1
for index in range(len(allIframesLen)):
self.driver.switch_to.default_content()
iframe = self.driver.find_elements_by_tag_name('iframe')[index]
self.driver.switch_to.frame(iframe)
try:
print(self.driver.find_element_by_id("audio-instructions").text)
time.sleep(1)
audioBtn = self.driver.find_element_by_id('recaptcha-audio-button') or self.driver.find_element_by_id('recaptcha-anchor')
audioBtn.click()
audioBtnFound = True
audioBtnIndex = index
break
except Exception as error:
pass
time.sleep(3)
if audioBtnFound:
#do what do you want
else:
print('Button not found.')
如果你把这段代码正确地应用到你想要的按钮上但它不起作用,你是对的,shadow-root 可能是这个问题的原因。
我的代码说明;
- 使用 selenium 打开 chrome
- 前往URL
- 等待几秒钟后找到验证码
- 查找验证码框架内的所有 iframe
- 每次进入找到的 iframe 并尝试单击按钮
- 当您找到可点击的按钮时,结束循环并分配一个该按钮所属的 iframe 变量
非常认真的笔记;需要说明一下,写第二种方式并不是为了给出答案,主要是为了展示逻辑。