Как найти iframe на тестовой странице Google Captcha с python селеном - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь добраться до фрейма на этой странице: https://www.google.com/recaptcha/api2/demo. это фрейм с изображениями, которые вы должны нажать. Если отображается iframe, вы нажимаете кнопку «Я не робот». Вы должны использовать селен, чтобы это работало, оно не будет работать, если вы сделаете это вручную в chrome.

код:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.google.com/recaptcha/api2/demo')
iframe = driver.find_element_by_xpath('//*[@id="recaptcha-demo"]/div/div/iframe')
driver.switch_to.frame(iframe)
driver.find_element_by_class_name('recaptcha-checkbox').click()
#choose new iframe with pictures - doesn't work
iframe = driver.find_element_by_xpath('/html/body/div[2]/div[4]/iframe')

в чем здесь проблема? tnx, Вася

1 Ответ

0 голосов
/ 13 января 2020

Для вызова click() на reCAPTCHA вам необходимо:

  • Индуцировать WebDriverWait для нужного фрейм должен быть доступен и переключиться на него .
  • Индуцировать WebDriverWait для желаемого элемента, который будет кликабельным .
  • Вы можете использовать следующие стратегии локатора :

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    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:\Utility\BrowserDrivers\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-checkbox.goog-inline-block.recaptcha-checkbox-unchecked.rc-anchor-checkbox"))).click()
    
  • Снимок браузера:

captcha


tl; dr

Соответствующее обсуждение можно найти в:

...