javascript - 如何在 Selenium JS 中获取子节点的数量
问题描述
我正在为我的一个小项目抓取一个网站,我想获得教职员工姓名的数量。
名称在<tr>
标签下的<tbody>
标签中。
我想将教师姓名推送到一个列表中,现在我正在使用当前网站上的硬编码数量的教师来做这件事。现在没关系,但这个数字可能会改变,如果他们增加更多的院系,我希望我的代码能够工作。
var listOfFaculties = [];
for(var i = 2; i <= 18; i++){ // start with inedx 2 and go to 18 (from the first to the last faculty on the site) -- HARDCODED
await driver.findElement(By.xpath(getXPath(i))).getText().then(function(value) {
listOfFaculties.push({
Faculty: value
});
});
}
function getXPath(num){
return "//div[@id = 'main']/center[2]/font[@class='normal']/table/tbody/tr[" + num + "]/td[1]";
}
<tbody>
有没有办法获取标签的子节点数?因此,我可以将数字放入 for 循环中,而无需对边界进行硬编码。
解决方案
使用 List ofWebElement
获取教师长度。
您修改后的代码应该像 -
List<WebElement> elements = driver.findElements(By.xpath("//div[@id = 'main']/center[2]/font[@class='normal']/table/tbody/tr"));
var listOfFaculties = [];
for(var i = 2; i < elements.size(); i++){
await driver.findElement(By.xpath(getXPath(i))).getText().then(function(value) {
listOfFaculties.push({
Faculty: value
});
});
}
function getXPath(num){
return "//div[@id = 'main']/center[2]/font[@class='normal']/table/tbody/tr[" + num + "]/td[1]";
}
推荐阅读
- kubernetes - Airflow Kubernetes Pods 异常错误 - (404) 原因:未找到
- visual-studio - VS 安装程序 - 更改主题?
- php - 什么缓存存储 Windows PATH 以及如何清除它?
- sqlite - SQLite:仅从其字节识别页面类型?
- r - 如何更改由 stargazer 生成的标题名称和注释?
- node.js - https.get 与 youtube 视频返回一个空缓冲区
- python - 在数千个条件下过滤 Pandas 数据框
- android - 以编程方式在实时数据库中导入 JSON,而不是手动
- java - Spring数据JPA存储库中的解析和查询构建哪个类?
- rest - 表达“参数中未指定任何内容时全选”的正确方法是什么?