在JavaScript版Selenium中获取指定类标签内容及特定<tr>标签数量
解决JavaScript版Selenium WebDriver的两个爬取问题
嘿,我来帮你搞定这两个网页爬取里的常见需求,直接上实用方案:
1. 获取带有指定类名的标签内容
你可以通过By.className或者CSS选择器定位目标元素,再获取它们的文本内容。这里给两种常用方法:
方法1:使用className定位
const { By } = require('selenium-webdriver'); // 定位所有带有目标类名的元素 const targetElements = await driver.findElements(By.className('your-target-class')); // 遍历获取每个元素的文本 for (const elem of targetElements) { // getText() 获取可见文本,适合大多数场景 const content = await elem.getText(); console.log('标签内容:', content); // 如果需要包括隐藏文本,用这个: // const fullContent = await elem.getAttribute('textContent'); // console.log('完整内容:', fullContent); }
方法2:使用CSS选择器定位(更灵活)
如果你的类名是复合类(比如class="item active"),CSS选择器会更方便:
const targetElements = await driver.findElements(By.cssSelector('.your-target-class')); // 同样遍历获取内容 for (const elem of targetElements) { console.log(await elem.getText()); }
2. 统计页面中恰好包含三个子元素的<tr>标签数量
这里有两种高效的实现方式,都能精准统计符合条件的<tr>:
方法1:使用XPath定位
XPath可以直接筛选出子元素数量等于3的<tr>:
const trElements = await driver.findElements(By.xpath('//tr[count(child::*)=3]')); console.log(`符合条件的<tr>数量:${trElements.length}`);
解释:count(child::*)=3表示统计当前<tr>的所有子元素(不管标签类型)数量等于3,完全匹配你的需求。
方法2:直接在浏览器上下文执行JS(高效)
如果页面元素很多,这种方式会更快,因为不需要把所有元素都传回Node.js上下文:
const count = await driver.executeScript(() => { // 在浏览器里直接遍历所有<tr> const allTrs = document.querySelectorAll('tr'); let matchCount = 0; allTrs.forEach(tr => { // 判断子元素数量是否恰好为3 if (tr.children.length === 3) { matchCount++; } }); return matchCount; }); console.log(`符合条件的<tr>数量:${count}`);
针对你给出的示例HTML,这两种方法都会返回2,完全符合预期。
内容的提问来源于stack exchange,提问作者morty
相关产品推荐
相关产品推荐

