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

在Selenium方法中使用%s字符串格式化报错的解决求助

解决字符串格式化错误的思路

你的问题出在字符串格式化的位置完全错了——你把%(counter)加到了错误提示文本的后面,导致Python试图给一个没有任何占位符的字符串传参数,自然就会抛出not all arguments converted during string formatting错误。

正确的写法

你需要对第一个参数(XPath字符串)进行格式化,把%s替换成counter的值,再把完整的XPath传给wait_for_element方法:

self.wait_for_element(
    "//div[contains(@class, 'fly-wrapper recent-content-trigger')][%s]//div[contains(@class, 'recent-content-info')]" % counter,
    'Course list not found'
)

为什么原来的写法会报错?

你的错误写法里,'Course list not found' %(counter) 是在给一个没有%s占位符的字符串传参数,Python不知道该把counter的值放到哪里,所以触发了格式化失败的错误。正确逻辑应该是:先把带占位符的XPath字符串和counter做格式化,生成完整的定位表达式后,再作为第一个参数传入方法。

更推荐的现代写法(f-string)

Python 3.6+ 支持的f-string可读性更强,也不容易犯这种参数位置错误,非常推荐使用:

self.wait_for_element(
    f"//div[contains(@class, 'fly-wrapper recent-content-trigger')][{counter}]//div[contains(@class, 'recent-content-info')]",
    'Course list not found'
)

另外顺便提个小优化:你后面获取course_display_name时用的XPath是全局路径,可能会拿到页面上第一个匹配的元素,建议改成相对路径(开头加.),确保只在当前遍历的course元素下查找:

course_display_name = course.find_element_by_xpath(".//div[contains(@class, 'recent-content-info')]").text

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:28:56