javascript - Selenium:通过 Javascript 抓取所有元素属性返回不正确的结果
问题描述
我正在使用以下代码通过 javascript 抓取所有元素属性:
((JavascriptExecutor) driver).executeScript("var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value}; return items;", element);
虽然这主要只返回标识相关元素的属性,但我发现此代码返回的某些属性实际上并不对应于所需的元素。
一个例子:
如果您导航到http://google.com并通过(或许多其他 XPath 中的任何一个)识别搜索框(.//input[contains (@role,'combobox')])
,然后执行所述 JS 代码,它会返回(.//input[contains (@class,'gsfi lst-d-f')])
实际上与搜索框不对应的属性。事实上,当使用 FireBug 时,这个属性甚至不会出现在页面上。
我确实注意到,虽然页面上的样式标记中隐藏了类似的文本,但即使在那里我也没有找到该文本的完全匹配。在任何一种情况下,它仍然不对应于所讨论的元素。
为什么 JS 会返回这个文本,有没有办法解决它?
谢谢
解决方案
推荐阅读
- php - PHP Group PDO 或 JSON 结果由 3 个字段和输出
- android - 在 kotlin 中使用“let”时,我的变量名和“it”有什么区别?
- regex - Laravel 应用程序的 IIS URL 重写不适用于多个 URI 段
- python - NodeJS fetch 返回的数据多于应有的数据,这不是我的 Flask 服务器发送的数据
- oauth-2.0 - 使用 Azure B2C 并通过 Apple / MSAL.JS / 隐式流登录 - 获取令牌静默失败并出现 X-Frame Deny 错误
- python-3.x - 通过 Python 为一个子元素设置多个属性
- c# - 从程序集中获取 C# 中的所有泛型类型
- python-3.x - VScode CodeRunner扩展错误在python的同一行打印值
- angular - 来自firebase cloudstore查询中单个集合的多个'in'运算符
- javascript - vue__WEBPACK_IMPORTED_MODULE_1__.default 不是构造函数