Selenium使用XPath无法定位Etherscan网站页码元素问题求助
问题原因及修复方案
核心错误点
- XPATH语法错误:类名属性未加引号,且多类名完全匹配规则要求类名顺序、空格完全一致才会命中
- 遗漏iframe切入操作:Etherscan的持仓余额表格是嵌套在iframe内加载的,直接在外层DOM查找元素必然定位失败
- 定位规则不准确:你所写的类名匹配规则无法命中存储最大页码的元素
修正后的可运行代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox() driver.get("https://etherscan.io/token/0xB8c77482e45F1F44dE1745F52C74426C631bDD52#balances") wait = WebDriverWait(driver, 30) # 切入持仓列表对应的iframe iframe = wait.until(EC.presence_of_element_located((By.ID, "tokenholderlistiframe"))) driver.switch_to.frame(iframe) # 定位所有分页数字按钮,取最大值 page_btns = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//ul[contains(@class,'pagination')]//a[contains(@class,'page-link') and @data-dt-idx]"))) max_page = max([int(btn.text) for btn in page_btns if btn.text.isdigit()]) print(f"最大页码数:{max_page}") # 操作完成切回主DOM driver.switch_to.default_content() driver.quit()
补充说明
如果运行时触发Cloudflare人机验证,手动完成验证后代码会自动继续执行,也可以接入无头浏览器验证绕过方案降低拦截概率,最终输出的最大页码和预期的20一致。
内容的提问来源于stack exchange,提问作者Hamza Ahmed
相关产品推荐
相关产品推荐

