You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的Selenium选择器返回字典?(Django/Python 3.8)

问题1:AttributeError: 'dict' object has no attribute 'text' 解决方案

该错误的核心原因是升级Selenium后,版本与PythonAnywhere预装的ChromeDriver兼容性不匹配,导致WebDriver没有把返回结果序列化为标准WebElement对象,直接返回了W3C协议的原始字典结构。可按以下步骤修复:

  • 先确认版本匹配关系:Selenium 4.x需要搭配ChromeDriver 96及以上版本,你可以在PythonAnywhere的控制台执行chromedriver --version查看当前ChromeDriver版本
  • 替换已废弃的元素定位语法:Selenium 4已经完全废弃find_element_by_class_name这类直接调用的定位方法,需要改用By类实现定位,同时补充PythonAnywhere容器环境必须的启动参数,修改后的代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By

def Synonym():
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--headless=new") # 新版headless模式兼容性更优
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("--no-sandbox") # 无root权限环境必须添加该参数
    chrome_options.add_argument("--disable-dev-shm-usage")
    browser = webdriver.Chrome(options=chrome_options)
    browser.get("https://www.synonym.com/synonyms/test")
    test = browser.find_element(By.CLASS_NAME, "logo").text
    browser.quit()
    return test
  • 如果修改后仍然返回字典结构,可将Selenium降级到兼容性最稳定的3.141.0版本,执行命令pip install selenium==3.141.0即可。
问题2:避免Selenium在/tmp目录生成文件

Chrome/ChromeDriver运行时必须生成临时用户数据、沙箱文件、日志等内容,无法完全阻止生成,但可以通过启动参数将存储路径迁移到你自己的项目目录,避免写入系统/tmp目录:

  • 提前在你的项目目录下创建一个有读写权限的临时文件夹,比如/home/你的用户名/你的项目路径/chrome_temp
  • 在Chrome启动参数中添加自定义临时目录配置,同时添加参数减少不必要的临时文件生成:
chrome_options.add_argument("--user-data-dir=/home/你的用户名/你的项目路径/chrome_temp")
chrome_options.add_argument("--disk-cache-dir=/home/你的用户名/你的项目路径/chrome_cache")
chrome_options.add_argument("--disable-crash-reporter")
chrome_options.add_argument("--disable-logging")
chrome_options.add_argument("--log-level=3")
  • 你也可以在每次调用browser.quit()之后,手动删除自定义临时目录下的内容,彻底清理生成的文件。

内容的提问来源于stack exchange,提问作者Madison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:15:06