使用Python Selenium爬取重Java渲染网站无法获取目标元素求助
问题原因与解决方案
现有代码的核心错误
- 重复初始化ChromeDriver:连续两次调用
webdriver.Chrome(),会覆盖掉webdriver_manager自动适配驱动版本的逻辑,容易出现驱动和浏览器版本不兼容的异常 - 多类名定位错误:
find_elements_by_class_name()仅支持传入单个类名,传入空格分隔的多个类名会直接匹配失败,初版代码就是该问题导致返回空结果 - XPATH路径语法错误:从driver根节点查找元素时不需要加
.前缀,.仅用于从某个已定位的子元素下递归查找,你写的.//开头的XPATH会匹配不到根路径下的元素 - 没有提取元素文本:直接打印
earnings变量,输出的是WebElement对象列表,不是你需要的金额文本 - 绝对路径XPATH稳定性差:多层级绝对路径只要页面结构有一处调整就会失效,优先用元素属性定位更稳妥
修正后的可运行代码
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 from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service # 配置Chrome启动参数,规避反爬检测 opt = webdriver.ChromeOptions() opt.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") # 去掉以下参数的注释可开启无头模式,开启后不会弹出浏览器窗口 # opt.add_argument("--headless=new") # 额外反爬规避参数,遇到Cloudflare拦截时可开启 opt.add_argument("--disable-blink-features=AutomationControlled") opt.add_experimental_option("excludeSwitches", ["enable-automation"]) opt.add_experimental_option("useAutomationExtension", False) # 仅初始化一次驱动,用webdriver_manager自动匹配版本 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=opt) driver.get("https://explorer.helium.com/accounts/13pm9juR7WPjAf7EVWgq5EQAaRTppu2EE7ReuEL9jpkHQMJCjn9") try: # 等待目标元素可见,多类名用CSS选择器定位更稳定 element = WebDriverWait(driver, 60).until( EC.visibility_of_element_located((By.CSS_SELECTOR, "div.text-base.text-gray-600.mb-1.tracking-tight.w-full.break-all")) ) # 提取文本内容 earnings_text = element.text print(f"获取到的金额:{earnings_text}") finally: driver.quit()
额外注意事项
- 目标站点有Cloudflare反爬检测,如果等待超时,可适当延长等待时长,或手动打开页面确认是否需要人机验证
- 如果需要提取多个同类金额,把
visibility_of_element_located换成visibility_of_all_elements_located,返回的是元素列表,遍历提取text即可
内容的提问来源于stack exchange,提问作者Pierce Kingston
相关产品推荐
相关产品推荐

