下午好🌅🌅🌅
本答案参考通义千问
你遇到的问题有两个主要错误:
-
TypeError: 'module' object is not callable
这个错误通常是因为你在使用 webdriver.Edge(path) 时,错误地导入了模块而不是类。
-
ValueError: Timeout value connect was <object object at 0x...>, but it must be an int, float or None.
这个错误可能是由于在初始化浏览器时,某些参数设置不正确,或者驱动与浏览器版本不兼容。
✅ 解决方案
1. 正确导入 Edge 类
你可能错误地导入了 selenium.webdriver 模块,而不是具体的浏览器类(如 Edge)。请确保你正确导入了 Edge 类。
❌ 错误代码:
from selenium import webdriver
✅ 正确代码:
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium import webdriver
重点: 使用 webdriver.Edge() 需要正确的类导入方式。
2. 使用 Service 对象来创建 Edge 浏览器实例
从 Selenium 4 开始,推荐使用 Service 类来指定驱动路径。
✅ 修改后的完整代码示例:
from selenium import webdriver
from selenium.webdriver.edge.service import Service
# 设置驱动路径
path = 'msedgedriver.exe'
# 创建服务对象
service = Service(executable_path=path)
# 创建浏览器操作对象
browser = webdriver.Edge(service=service)
# 访问网站
url = 'https://www.baidu.com'
browser.get(url)
重点: 使用 Service 来创建 Edge 实例是更推荐的方式,避免超时等错误。
3. 处理超时问题
如果你仍然遇到超时错误,可以尝试以下方法:
✅ 设置连接和页面加载的超时时间:
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 设置驱动路径
path = 'msedgedriver.exe'
# 创建服务对象
service = Service(executable_path=path)
# 设置浏览器选项(可选)
options = webdriver.EdgeOptions()
# 创建浏览器对象
browser = webdriver.Edge(service=service, options=options)
# 设置超时时间(单位:秒)
browser.set_page_load_timeout(10) # 页面加载超时
browser.set_script_timeout(10) # JS 脚本执行超时
# 访问网站
url = 'https://www.baidu.com'
browser.get(url)
# 等待元素出现(可选)
try:
element = WebDriverWait(browser, 10).until(
EC.presence_of_element_located((By.ID, "kw"))
)
except Exception as e:
print("等待元素超时:", e)
# 执行其他操作...
重点: 使用 set_page_load_timeout() 和 set_script_timeout() 可以防止因页面加载过慢导致的超时错误。
4. 检查 Edge 驱动与浏览器版本是否匹配
重点: 驱动版本与浏览器版本不匹配会导致各种异常,包括超时、无法启动等。
5. 检查防火墙或网络设置
有时,由于网络限制或防火墙设置,Selenium 无法成功连接到目标网站,也可能导致超时。
重点: 如果你使用的是公司或学校网络,建议尝试切换网络环境或配置代理。
📌 总结
| 问题 | 原因 | 解决方法 |
|------|------|----------|
| TypeError: 'module' object is not callable | 错误导入了 webdriver 模块,没有使用 Edge 类 | 正确导入 Edge 类并使用 Service 初始化 |
| ValueError: Timeout value connect was ... | 超时参数设置不正确 | 使用 set_page_load_timeout() 和 set_script_timeout() 设置合理超时 |
| 驱动与浏览器版本不一致 | 驱动版本与浏览器不匹配 | 下载与浏览器版本一致的 msedgedriver.exe |
如果你能提供完整的错误信息或截图,我可以进一步帮助你定位问题。