Powershell с Selenium: Ошибка: элемент не взаимодействует

#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 при запуске команды