在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
相关产品推荐
相关产品推荐

