У меня возникли проблемы при попытке обратиться к элементам внутри iframe, содержащим рекапчу.
Цель моего сценария - помочь человеку заполнить поисковую форму, нажав кнопку "Поиск", и направить пользователя к сделке. с reCaptcha (я не пытаюсь сломать капчу или что-то в этом роде) и после поиска откройте найденную страницу, чтобы получить некоторую информацию и показать ее пользователю для подтверждения.
Проблема когда я программно нажимаю кнопку поиска, скрипт reCaptcha будет действовать. Иногда он очищает доступ и идентифицирует, что запрос сделан человеком (когда пользователь делал другие вещи непосредственно перед использованием сценария); в других случаях он представляет всплывающее окно reCaptcha с тестированием изображений, если вы человек.
Мне нужно различать guish, когда скрипт reCaptcha автоматически идентифицирует или представляет изображения капчи, потому что в последних случаях я ' Я покажу всплывающее окно, сообщающее пользователю, что go нужно разобраться с капчей.
Вот проблема: я могу определить iframe reCaptcha (хранится в переменной ifrCaptcha
); Я также знаю, когда проблема показывается стилем видимости CSS div
, содержащим iframe (ifrCaptcha.parentElement.parentElement.Style.visibility
). Но мне не удалось найти способ ссылки на документ, содержащийся в iframe.
Когда я использую ifrCaptcha.document
, он получает основной документ страницы, а не документ iframe.
Как я могу сослаться на документ iframe?
Страница не опубликована c, но я думаю, что любая страница с reCaptcha сделает эту работу; код выглядит следующим образом (цель состоит только в том, чтобы ссылаться на что-либо в документе iframe; например, на заголовок документа iframe):
Sub AbrePesquisa()
Dim IE As InternetExplorer , DocHTML As HTMLDocument, ifrDocHTML As HTMLDocument
Dim intCont As Integer
Dim ifrCaptcha As HTMLIFrame
Dim bolCaptchaValidado As Boolean, bolCaptchaVisivel As Boolean
Set IE = New InternetExplorer
IE.Navigate "http://www.whatever-url-which-uses-recaptcha.com"
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE
Set DocHTML = IE.document
Set ifrCaptcha = Nothing
Set ifrCaptcha = PegarCaptcha(DocHTML)
strSrcCaptcha = ifrCaptcha.src ' When page reloads, the iframe src changes a bit, so I need it
DocHTML.getElementById("SearchString").Value = strSearchParameters
DocHTML.getElementById("SearchButton").Click
' Wait for browser to process the reCaptcha script
Do
Set ifrCaptcha = Nothing
Set ifrCaptcha = PegarCaptcha(DocHTML)
bolCaptchaVisivel = ExibindoCaptcha(DocHTML, ifrCaptcha)
If bolCaptchaVisivel = False Then
If strSrcCaptcha <> ifrCaptcha.src Then bolCaptchaValidado = True
End If
Loop Until bolCaptchaValidado = True Or bolCaptchaVisivel = True
Set ifrDocHTML = ifrCaptcha.document
Debug.Print ifrDocHTML.Title ' Returns the main page title
Debug.Print ifrDocHTML.InnerHtml ' Returns the main page HTML
End Sub
Function ExibindoCaptcha(DocHTML As HTMLDocument, ifrCaptcha As HTMLIFrame) As Boolean
If ifrCaptcha Is Nothing Then
ExibindoCaptcha = False
ElseIf ifrCaptcha.parentElement Is Nothing Then ' The page I'm working in has the captcha inside a div nested in another div, both of which VBA returns as non-existing when reCaptcha isn't showing (even I seeing both exists in browser, in Inspector mode)
ExibindoCaptcha = False
ElseIf ifrCaptcha.parentElement.parentElement Is Nothing Then
ExibindoCaptcha = False
Else
If ifrCaptcha.parentElement.parentElement.Style.visibility = "visible" Then
ExibindoCaptcha = True
Else
ExibindoCaptcha = False
End If
End If
End Function
Function PegarCaptcha(DocHTML As HTMLDocument) As HTMLIFrame
Dim ifrCont As HTMLIFrame
For Each ifrCont In DocHTML.getElementsByTagName("iframe")
If ifrCont.Title = "desafio reCAPTCHA" Then Exit For
Next ifrCont
If ifrCont Is Nothing Then
Set PegarCaptcha = Nothing
Else
Set PegarCaptcha = ifrCont
End If
End Function
Кто-то там может помочь мне сослаться на документ, содержащийся в iframe капчи?
Заранее спасибо за любую помощь!