首页 > 解决方案 > 如何在 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 循环中,而无需对边界进行硬编码。

标签: javascriptseleniumselenium-webdriver

解决方案


使用 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]";
}

推荐阅读