Python Selenium打印find_elements结果返回WebElement对象问题排查
问题原因
你看到的输出不是程序异常,是Selenium WebElement对象的默认打印内容,出现该问题的原因主要有三个:
find_elements是复数定位方法,返回的是匹配到的所有WebElement对象组成的列表,直接打印列表只会输出对象的序列化标识,不会自动提取元素内的文本。你之前能正常拿到文本大概率是之前代码中额外调用了.text属性提取内容,或是早期Selenium版本的打印逻辑不同。- CoinMarketCap近期更新了页面反爬策略,无头模式下页面没有正常渲染目标数据,导致定位到的元素无有效文本。
- 网站更新了页面结构,你原来的XPath路径定位到的不是承载时间文本的目标节点。
修复步骤
- 优先修改元素取值逻辑,单个元素用单数定位方法,主动提取文本内容,同时增加等待逻辑避免元素未加载完成就定位:
# 替换原有added_ago相关代码 driver.implicitly_wait(10) # 最多等待10秒待元素加载完成 try: # 单数定位取第一个匹配元素 added_ago_ele = driver.find_element(By.XPATH, '//tbody[1]/tr[1]/td[10]') added_ago = added_ago_ele.text print(added_ago) except Exception as e: print(f"定位失败:{e}")
- 如果仍无法拿到有效内容,优化无头模式配置绕过反爬检测:
chrome_options = Options() # 改用新版无头模式,自动化特征更少 chrome_options.add_argument("--headless=new") # 伪造正常浏览器UA chrome_options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") # 移除Selenium自动化标识 chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option("useAutomationExtension", False) driver = webdriver.Chrome(executable_path=binary_path, options=chrome_options) # 启动后修改webdriver检测属性 driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
- 如果出现定位报错,打开浏览器开发者工具重新校验XPath路径,确认页面表格列的索引是否发生了变化。
内容的提问来源于stack exchange,提问作者CryptoAngel
相关产品推荐
相关产品推荐

