You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium-WebDriver(JS)获取元素属性时报错:is not a function

解决Selenium-WebDriver(JS版)获取元素属性的错误

你的错误核心是调用顺序错了:swd.By.css(...)只是生成定位规则,不是实际的页面元素,你直接在它上面调用getAttribute()当然会报错——定位器对象根本没有这个方法。必须先通过findElement拿到页面元素对象,再在元素上调用属性方法。

修正后的代码

let swd = require("selenium-webdriver");
const { By, until } = swd;
let browser = new swd.Builder();
let tab = browser.setChromeOptions().forBrowser("chrome").build();

async function main() {
    try {
        await tab.manage().setTimeouts({ implicit: 10000 });
        await tab.get("https://mom.maison-objet.com/fr/marque/10008/rory-dobner-ltd?request_type=meeting#xtor=AL-1459");

        // 用显式等待替代sleep,比固定等待更可靠
        const websiteElement = await tab.wait(until.elementLocated(By.css('#phone_number a:nth-child(2)')), 10000);
        const website = await websiteElement.getAttribute('href');
        
        console.log(website);
    } catch (err) {
        console.error("执行出错:", err);
    } finally {
        await tab.quit(); // 执行完关闭浏览器
    }
}

main();

关键说明

  • 先通过tab.wait(until.elementLocated(...))或tab.findElement(...)获取到WebElement实例,再调用getAttribute()方法
  • 显式等待会等待元素出现后再执行后续操作,比tab.sleep(3000)更灵活,能适配不同的页面加载速度
  • 增加try/catch块可以捕获执行过程中的错误,finally块确保浏览器一定会被关闭,避免资源浪费

内容的提问来源于stack exchange,提问作者GrowyTobe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:42:40