使用Python与Selenium点击CoinMarketCap页面按钮遇阻求助
解决CoinMarketCap评分按钮定位问题
核心问题分析
你之前使用的绝对XPath依赖页面固定层级,一旦页面布局调整就会失效,而且无法通过路径区分属性相同的「Good」「Bad」按钮。正确的做法是通过按钮文本内容或关联特征来定位,而非依赖固定层级。
是否需要用JavaScript执行点击?
优先尝试Selenium原生的click()方法,只有当按钮存在但不可交互(比如被遮挡、未完全加载、在视口外)时,再用JS点击兜底。
区分并点击按钮的代码示例
以下是基于Python Selenium的实现:
前置准备
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
点击「Good」按钮
driver = webdriver.Chrome() driver.get("https://coinmarketcap.com/currencies/bitcoin/") # 等待按钮加载完成(避免元素未就绪导致的错误) wait = WebDriverWait(driver, 10) # 通过按钮文本定位(处理文本前后可能的空格) good_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[normalize-space(text())='Good']"))) # 原生点击(优先使用) good_button.click() # 若原生点击失效,改用JS点击 # driver.execute_script("arguments[0].click();", good_button)
点击「Bad」按钮
只需把定位XPath中的文本替换为「Bad」即可:
bad_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[normalize-space(text())='Bad']"))) bad_button.click() # JS点击兜底方案 # driver.execute_script("arguments[0].click();", bad_button)
定位技巧补充
如果按钮文本可能有变化,还可以结合按钮关联的图标特征(比如「Good」按钮对应向上箭头图标)来定位,示例XPath:
//button[.//*[contains(@class, 'icon-caret-up')]]
对应的「Bad」按钮用向下箭头:
//button[.//*[contains(@class, 'icon-caret-down')]]
内容的提问来源于stack exchange,提问作者pythonrules01
相关产品推荐
相关产品推荐

