Selenium парсинг результата события после прохождения капчи TikTok
Разрабатываю софт по тик-току. Столкнулся с проблемой после прохождения circle-капчи, нужно как-то отрабатывать ответ, чтобы подтвердить, что капча решена успешно, как на скриншоте. Для решения используется сторонние средства API.
Проблема заключается в том, что всплытие окна "Вход выполнен" или же изменения текста после прохождения капчи происходит почти мгновенно (полагаю за счет средств JQuery). Вопрос как обрабатывать такие вещи? И как диагностировать (если страница обновляется мгновенно)? Заранее спасибо за ответ.
def circle_captcha_handle(driver):
"""
Алгоритм решения circle капчи
"""
status = False
i = 1
while True:
try:
outer_image_element = driver.find_element('xpath', '//img[@data-testid="whirl-outer-img"]')
outer_image_src = outer_image_element.get_attribute('src')
inner_image_element = driver.find_element('xpath', '//img[@data-testid="whirl-inner-img"]')
inner_image_src = inner_image_element.get_attribute('src')
except NoSuchElementException:
return
multipart_form_data = {
'FULL_IMG_CAPTCHA': (None, outer_image_src),
'SMALL_IMG_CAPTCHA': (None, inner_image_src),
'ACTION': (None, 'tiktokcircle'),
'USER_KEY': (None, CAPTCHA_API_KEY)
}
solve_captcha = requests.post(
'https://captcha.ocasoft.com/api/res.php',
files=multipart_form_data
)
if solve_captcha.text == 'FAILED_SOLVE_CAPTCHA':
logger.error('Не удалось решить капчу, попытка: {}'.format(i))
elem = driver.find_element('xpath', "//a[contains(@class, 'refresh')]")
elem.click()
time.sleep(10)
i = i + 1
if i == 10:
raise CaptchaHandleError
else:
logger.info('Капча решена')
solve_captcha = json.loads(solve_captcha.text)
x = solve_captcha.get('cordinate_x')
break
x_cord = int(solve_captcha.get('cordinate_x'))
slider = driver.find_element('xpath', '//div[@id="secsdk-captcha-drag-wrapper"]//div[1]')
for i in range(1, x_cord+1):
ActionChains(driver).click_and_hold(slider).move_by_offset(1, 0).perform()
if i == x_cord:
ActionChains(driver).move_by_offset(1, 0).release(slider).pause(1).perform()
print()
time.sleep(10)