使用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
相关产品推荐
相关产品推荐

