【问题标题】:How to perform multiline javascript instruction using Selenium Basic如何使用 Selenium Basic 执行多行 javascript 指令
【发布时间】:2021-04-30 13:00:24
【问题描述】:

我正在使用 VBA Selenium Basic 来解析 HTML 文档,试图从 td 元素中更改属性 style。我试图找到webelement.RemoveAtrrwebelement.SetAtrr之类的方法都没有结果。

在搜索了 DuckDuckGo 和 Stack Overflow 之后,我开始认为 Selenium Basic 不能删除、更改或插入属性——只能读取它们。所以我试着用javascript来做。

然后我来到浏览器控制台并使用以下几行:

var cell = document.querySelector('body > div > form:nth-child(5) > table > tbody > tr:nth-child(1) > tr:nth-child(1)');
cell.removeAttribute('class');
cell.setAttribute('style','background-color: #00FF7F;';

javascript 在页面上运行良好,丢弃旧的类信息并添加新的样式信息。所以,我来到 VBA 并尝试了这个:

oChrome.ExecuteScript "var sfCell = document.querySelector('body > div > form:nth-child(5) > table > tbody > tr:nth-child(1) > td:nth-child(1)');"
oChrome.ExecuteScript "sfCell.removeAttribute('class');"
oChrome.ExecuteScript "sfCell.setAttribute('style','background-color: #00FF7F;';"

但它没有用。第一行运行但不创建变量,正如我在控制台窗口中看到的那样。第二行从 javascript 而非 VB 中检索错误:sfCel.removeAttribute is not a function

我应该如何使用 ExecuteScript 执行 javascript 多行指令?我也接受不使用 javascript 来删除和更改属性的方法,但我真的很好奇上面代码中的问题。

谢谢!

【问题讨论】:

  • "var sfCell = ""document.query....""" 在这里,您正在创建一个 string 变量来保存一段 javascript。尝试删除嵌入的双引号。
  • 感谢您的回答。事实上,在控制台或 VBA 中插入引号是错误的,但这不是问题。我已经编辑了我的问题以删除引号。
  • 您的查询选择器似乎没有找到您想要的元素:可能存在时间问题?如果元素是动态的,则在 VBA 运行以执行 js 时它可能尚未呈现。
  • 根据ui.vision/rpa/docs/selenium-ide/executescript“脚本片段将作为匿名函数的主体执行”,因此您的sfCell 可能没有进入全局范围。尝试window.sfCell = ... 将其附加到全局(窗口)范围。或者省略var,这应该将变量放在全局范围内 - 请参阅stackoverflow.com/questions/2485423/…

标签: javascript vba selenium


【解决方案1】:

根据https://ui.vision/rpa/docs/selenium-ide/executescript

“脚本片段将作为匿名函数的主体执行”

所以也许你的sfCell 没有进入全球范围。

尝试window.sfCell = ... 将其附加到全局(窗口)范围。

或者省略var,这应该将变量放在全局范围内 - 请参阅Is using 'var' to declare variables optional?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 2021-05-14
    • 2021-01-27
    • 2011-02-15
    相关资源
    最近更新 更多