首页 > 解决方案 > 带有 Selenium 的 Powershell:错误:元素不可交互

问题描述

我需要用一个值更新一个文本区域。下面的代码会引发错误“元素不可交互”。这是因为 textarea 有“display:none”。如果我手动删除 NONE 这个词,然后再次运行脚本,它会很好地工作并且能够设置 textarea 的值。

$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 error: Invalid or unexpected token

标签: javascriptpowershellselenium

解决方案


尝试如下编辑代码以执行带有变量的 js:

$browser.executeScript("document.getElementById('g-recaptcha-response').value = arguments[0];", $CaptchaResponse)

与第一行一样,您应该提取变量并替换为 arguments[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)

推荐阅读