Нажмите на спам с Python Selenium - PullRequest
0 голосов
/ 29 мая 2020

Я хочу поставить галочку в Google ReCAPTCHA-test. Для этого (я думаю) мне нужно щелкнуть следующий диапазон:

<span class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox" role="checkbox" aria-checked="false" id="recaptcha-anchor" tabindex="0" dir="ltr" aria-labelledby="recaptcha-anchor-label"><div class="recaptcha-checkbox-border" role="presentation"></div><div class="recaptcha-checkbox-borderAnimation" role="presentation"></div><div class="recaptcha-checkbox-spinner" role="presentation"><div class="recaptcha-checkbox-spinner-overlay"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation"></div></span>

https://patrickhlauke.github.io/recaptcha/ Вот веб-сайт (это просто пустой веб-сайт с ReCAPTCHA на нем).

Я использую последнюю версию драйвера Chrome, который определяется как драйвер. Я пробовал:

driver.find_element_by_tag_name("span").click()

driver.find_element_by_xpath('//*[@id="recaptcha-anchor"]').click()

driver.find_element_by_id('recaptcha-anchor').click()

driver.find_element_by_class_name('recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox').click()

, но всегда получаю следующую ошибку:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {*this is every try different*}
  (Session info: chrome=83.0.4103.61)

Я новичок в Python, и это моя первая попытка с Selenium.

1 Ответ

0 голосов
/ 29 мая 2020

Флажок находится в iframe, поэтому вам нужно использовать селен, чтобы сначала переключиться на него. Ниже должно помочь вам установить флажок, а также позволит вам перейти к 9 полям.

Сначала убедитесь, что у вас есть следующий импорт

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

Далее:

# Switch to iframe to click the checkbox
WebDriverWait(driver, 5).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, ".g-recaptcha>div>div>iframe")))

#click the checkbox
driver.find_element_by_id('recaptcha-anchor').click()

#switch back to the main content in order to switch to the next iframe we need
driver.switch_to.default_content()

#switch to the iframe that contains the 9 boxes
WebDriverWait(driver, 5).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[title='recaptcha challenge']")))

#get the 9 boxes
boxes = driver.find_elements_by_css_selector('#rc-imageselect-target button')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...