ChromeDriver执行JS代码遇JavascriptException问题求助
问题原因与解决办法
报错的核心原因是JavaScript方法名拼写错误:
- 你使用的
document.getElementByClassName是不存在的方法,正确的方法名称是document.getElementsByClassName(注意单词末尾是复数形式Elements) - 该方法返回的是一个HTMLCollection元素集合,而非单个DOM元素,因此需要通过索引指定具体要操作的元素(比如取第一个元素就加
[0])
修正后的代码示例
方法1:修正方法名并指定元素索引
driver.execute_script("document.getElementsByClassName('hand card-stack fanned loose rotate-bottom ui-droppable')[0].classList.add('selectedstack');") elms = WebDriverWait(driver, 0.5).until(EC.presence_of_all_elements_located((By.XPATH, cards))) for elm in elms: driver.execute_script("arguments[0].setAttribute('class','selectedcard')", elm) driver.execute_script("arguments[0].click();", elm)
方法2:改用querySelector更简洁(匹配第一个符合条件的元素)
如果你只需要操作第一个匹配该类组合的元素,用querySelector更直观,写法如下:
driver.execute_script("document.querySelector('.hand.card-stack.fanned.loose.rotate-bottom.ui-droppable').classList.add('selectedstack');") elms = WebDriverWait(driver, 0.5).until(EC.presence_of_all_elements_located((By.XPATH, cards))) for elm in elms: driver.execute_script("arguments[0].setAttribute('class','selectedcard')", elm) driver.execute_script("arguments[0].click();", elm)
其他代码部分逻辑正常,只需修正第一行的JavaScript方法即可解决报错。
内容的提问来源于stack exchange,提问作者Adam Demo_Fighter
相关产品推荐
相关产品推荐

