javascript - 带有 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
解决方案
尝试如下编辑代码以执行带有变量的 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)
推荐阅读
- android - 如何在android时间选择器中设置“秒”?
- .net - 带有“非字符”的 Lookbehind 忽略位置 0 的匹配
- animation - 赛普拉斯等待转换完成(等待正确的宽度)
- node.js - 来自 apollo-server-micro 的 req.cookies 返回空对象
- python - 根据列 ID 在循环中对数据框列求和
- python - 在 Python 中四舍五入到小数点后三位
- laravel - 如何将中间件部分分配给 Laravel 资源路由?
- python - 拆分字符串并在数据框中对其进行排序
- c - 为什么 do while 循环在这里不能正常工作?
- flutter - 圆形缺口颤振与所选项目的变化