Selenium中find_element使用报错求助:NameError: name 'By' is not defined
问题解决:Selenium find_element 报错及按钮定位修正
1. 解决 NameError: name 'By' is not defined
你需要显式导入By类,它属于selenium.webdriver.common.by模块,在代码开头添加导入语句:
from selenium.webdriver.common.by import By
2. 修正按钮定位逻辑
By.class_name仅支持传入单个类名,你传入的是多个空格分隔的类名,这会直接导致定位失败。针对多class组合的元素,推荐使用By.CSS_SELECTOR,将多个类名用.连接(替换原有的空格):
button = driver.find_element(By.CSS_SELECTOR, ".rounded-md.mr-1.text-white.font-bold.text-base.cursor-pointer.py-1.px-3.mx-1")
完整修正后的代码
from selenium import webdriver from selenium.webdriver.common.by import By # 新增By类导入 import time driver = webdriver.Chrome(r"./driver/chromedriver") driver.get("https://cin.guru/g/438694") driver.maximize_window() time.sleep(5) button = driver.find_element(By.CSS_SELECTOR, ".rounded-md.mr-1.text-white.font-bold.text-base.cursor-pointer.py-1.px-3.mx-1") button.click() driver.quit() # 执行完操作后关闭浏览器
额外优化建议
- 优先使用显式等待替代
time.sleep(),避免因页面加载速度不稳定导致的元素未找到问题,示例代码:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等待10秒,直到按钮可点击 button = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, ".rounded-md.mr-1.text-white.font-bold.text-base.cursor-pointer.py-1.px-3.mx-1")) ) button.click()
内容的提问来源于stack exchange,提问作者Sayhag
相关产品推荐
相关产品推荐

