#javascript #powershell #selenium
#javascript #powershell #selenium
Вопрос:
Мне нужно обновить текстовую область значением. Приведенный ниже код выдает ошибку «элемент не взаимодействует». Это потому, что текстовая область имеет «display: none». Если я удалю слово NONE вручную, а затем снова запущу скрипт, он отлично работает и может установить значение текстовой области.
$browser = Start-SeChrome
$url = "https://www.freepik.com/profile/login"
$browser.Navigate().GoToURL($url)
$CaptchaResponse = "03AGdBq27yHAQ62QjKrtg"
ForEach ($TextArea_Element in (Find-SeElement -Driver $browser -TagName TextArea))
{
if ($TextArea_Element.GetAttribute('id') -eq "g-recaptcha-response") {$TextArea_Element.SendKeys($CaptchaResponse)}
Break
}
Таким образом, единственный доступный вариант — использовать Javascript, чтобы я мог напрямую взаимодействовать с DOM (https://fijiaaron.wordpress.com/2018/01/29/how-to-access-elements-when-you-get-elementnotinteractableexception/). Поэтому мне пришлось бы сделать что-то вроде этого:
$browser.executeScript("document.getElementById('g-recaptcha-response').value = $CaptchaResponse")
$browser.executeScript("___grecaptcha_cfg.clients[0].L.L.callback($CaptchaResponse)")
Но теперь я получаю другой набор ошибок: ошибка javascript: недопустимый или неожиданный токен
Ответ №1:
Попробуйте отредактировать свой код, как показано ниже, чтобы выполнить js с переменной:
$browser.executeScript("document.getElementById('g-recaptcha-response').value = arguments[0];", $CaptchaResponse)
Как и в первой строке, вы должны извлечь переменную и заменить на аргументы [0]
$browser.executeScript("___grecaptcha_cfg.clients[0].L.L.callback('arguments[0]');", $CaptchaResponse)
Вы можете выполнить JS следующим образом, используйте arguments
для передачи ваших переменных в JavaScript:
$new_style = "display: block; left: 20px;"
$browser.executeScript("arguments[0].style='arguments[1]';", $element, $new_style)
Комментарии:
1. Ваша команда отлично сработала для первой строки. Можете ли вы также помочь со второй строкой. Извините, я плохо разбираюсь в javascript — $browser.executeScript(«___grecaptcha_cfg.clients[0].LL.обратный вызов ($CaptchaResponse)»)
2. @hdsouza Я отредактировал свой ответ. Надеюсь, это полезно для вас 🙂
3. Спасибо, Юн. Когда я запускаю вторую команду, я получаю сообщение об ошибке «Исключение, вызывающее «executeScript» с аргументами «2»: «ошибка javascript: не удается прочитать свойство ‘L’ неопределенного»
4. Я не уверен, что делает эта команда, но я отредактировал свой ответ для второй команды. Не могли бы вы попробовать еще раз?
5. Возможно, чтобы упростить это, как я могу выполнить эту строку JavaScript «___grecaptcha_cfg.clients [0]» с помощью powershell и сохранить в переменной. Я обновил вопрос скриншотом того, что я вижу в инструментах разработки Google при запуске команды