Selenium无法定位带多class属性的可编辑div输入框元素该如何解决?
问题根源
find_element_by_class_name 仅支持传入单个类名,你传入的writtingArea _editor是两个独立的类名,中间的空格是类名分隔符,因此该方法无法识别匹配,直接报错。
修复方案
方案1:使用CSS选择器定位(推荐)
同时匹配两个类名,写法如下:
# 注意Selenium 4+ 已废弃原find_element_by_* 方法,建议统一使用By类定位 from selenium.webdriver.common.by import By driver.find_element(By.CSS_SELECTOR, ".writtingArea._editor").click()
如果需要更精准匹配,也可以结合可编辑属性或者占位符属性:
# 结合contenteditable属性 driver.find_element(By.CSS_SELECTOR, ".writtingArea._editor[contenteditable='true']").click() # 结合placeholder属性 driver.find_element(By.CSS_SELECTOR, 'div[placeholder="보낼 메시지를 입력하세요."]').click()
方案2:使用正确的Xpath写法
如果偏好Xpath定位,可按照如下方式写,避免语法错误:
from selenium.webdriver.common.by import By # 精确匹配class属性 driver.find_element(By.XPATH, '//div[@class="writtingArea _editor" and @contenteditable="true"]').click() # 模糊匹配类名,不受类名排序影响 driver.find_element(By.XPATH, '//div[contains(@class,"writtingArea") and contains(@class,"_editor")]').click()
额外注意事项
如果调整定位语法后仍然找不到元素,大概率是元素未完成加载,建议添加显式等待避免时序问题:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等待10秒,直到元素可点击再执行操作 wait = WebDriverWait(driver, 10) input_area = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".writtingArea._editor"))) input_area.click() # 输入内容直接调用send_keys即可 input_area.send_keys("测试输入内容")
内容的提问来源于stack exchange,提问作者신호진
相关产品推荐
相关产品推荐

