【发布时间】:2021-04-30 13:00:24
【问题描述】:
我正在使用 VBA Selenium Basic 来解析 HTML 文档,试图从 td 元素中更改属性 style。我试图找到webelement.RemoveAtrr、webelement.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