How to click on elements within an iframe to enable the captcha through the audio using Selenium and Python

夙愿已清 提交于 2020-06-05 06:16:36

问题


I want to, click on the button to resolve the captcha through the audio, but selenium does not detect the specified "id".

browser.get("https://www.google.com/recaptcha/api2/demo")
mainWin = browser.current_window_handle  
iframe = browser.find_elements_by_tag_name("iframe")[0]
browser.switch_to_frame(iframe)
CheckBox = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID ,"recaptcha-anchor"))).click()
sleep(4)
audio = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID ,"recaptcha-audio-button"))).click()

回答1:


To click() on the button to resolve the captcha through the audio as the the desired elements are within an <iframe> so you have to:

  • Induce WebDriverWait for the desired frame to be available and switch to it.
  • Induce WebDriverWait for the desired element to be clickable.
  • You can use the following Locator Strategies:

    • Code Block:

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
      options = webdriver.ChromeOptions() 
      options.add_argument("start-maximized")
      options.add_experimental_option("excludeSwitches", ["enable-automation"])
      options.add_experimental_option('useAutomationExtension', False)
      driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
      driver.get("https://www.google.com/recaptcha/api2/demo")
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src^='https://www.google.com/recaptcha/api2/anchor']")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span#recaptcha-anchor"))).click()
      driver.switch_to.default_content()
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title='recaptcha challenge']")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#recaptcha-audio-button"))).click()
      
  • Browser Snapshot:


Reference

Ways to deal with #document under iframe


Outro

You can find a couple of relevant discussions in:

  • How to click on the reCaptcha using Selenium and Java
  • CSS selector for reCaptcha checkbok using Selenium and vba excel
  • Find the reCAPTCHA element and click on it — Python + Selenium


来源:https://stackoverflow.com/questions/59077053/how-to-click-on-elements-within-an-iframe-to-enable-the-captcha-through-the-audi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!