微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

显式等待被绕过而不会出错 Selenium Python

如何解决显式等待被绕过而不会出错 Selenium Python

我正在尝试制作一个登录我帐户的机器人。 插入密码和用户名后,我让我的机器人点击“我不是机器人”recaptcha 复选框。

标记 Recaptcha 复选框后,它可能会随机出现第二个 Recaptcha,这次是带有图像的。好吧,我可以通过使用音频到文本的方法解决它。问题是这个 Recaptcha 随机出现。

我使用了显式等待,但它被绕过并且没有给我任何错误

这是我的代码

#solve first recaptcha (I'm not a robot)
driver.switch_to_frame(element)                   #element = captcha frame already found
recaptcha = driver.find_element_by_xpath('//*[@id="recaptcha-anchor"]/div[1]')
driver.execute_script("arguments[0].click();",recaptcha)
_delay()

driver.switch_to_default_content()

#if an image captcha frame appears click on the audio button 

try:
    recaptcha_frame = webdriverwait(driver,10).until(
        EC.presence_of_element_located((By.XPATH,'/html/body/div/div/div[3]/div[2]/div[1]'))).find_element_by_tag_name('iframe') #locating the recaptcha image frame
        
    driver.switch_to_frame(recaptcha_frame)
    audio_button = driver.find_element_by_class_name('rc-button goog-inline-block rc-button-audio')
    driver.execute_script("arguments[0].click();",audio_button)
  
except:
    pass

如果我使用 driver.quit() 而不是 pass 它会关闭会话。我的目标是点击audio_button。想知道为什么这种显式等待不起作用吗?

解决方法

如果您已经使用隐式等待,我认为您不需要使用显式等待。这可能是第一个问题。对于 implicit wait,代码应该类似于:

try:
    recaptcha = driver.find_elements_by_xpath("Your recaptcha_frame stable xpath")
    recaptcha.click()
except NoSuchElementException:
    pass

另外,/html/body/div/div/div[3]/div[2]/div[1] 不是可靠的定位器。将其更改为稳定的。在您的代码中,如果找不到此定位器,则不会发生任何事情。使用更好的异常类型来了解原因。 如果您使用显式等待,请尝试将 presence_of_element_located 更改为 visibility_of_element_located

但是,定位器仍然是您代码中的主要问题。

另外,我怀疑您是否能够通过 recaptcha。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。