Python中如何拼接整数与字符串?解决XPath拼接报TypeError错误问题
问题修复方案
错误原因
报错TypeError: can only concatenate str (not "int") to str的核心原因是:循环变量i是整数类型,Python不支持直接将整数和字符串做拼接运算,你在拼接XPath路径时直接把整数i和字符串拼接导致了该错误。
修复方法
有两种常用的修复方式,任选其一即可:
方式1:手动将整数转为字符串
将拼接XPath时的i替换为str(i),修改对应代码行如下:
emailteste = self.driver.find_element_by_xpath("/html/body/div[1]/div/table/tbody/tr[" + str(i) + "]/td[2]") botaoteste = self.driver.find_element_by_xpath("/html/body/div[1]/div/table/tbody/tr[" + str(i) + "]/button[1]")
方式2:使用f-string格式化字符串(更推荐)
f-string是Python3.6+支持的字符串格式化语法,可读性更高,不容易出现引号匹配错误,修改后代码如下:
emailteste = self.driver.find_element_by_xpath(f"/html/body/div[1]/div/table/tbody/tr[{i}]/td[2]") botaoteste = self.driver.find_element_by_xpath(f"/html/body/div[1]/div/table/tbody/tr[{i}]/button[1]")
额外逻辑修正提醒
你现有代码中还有一处逻辑错误:if emailteste == teste是两个WebElement对象直接对比,永远不会返回True,你需要提取元素的文本内容做对比,修改为:
if emailteste.text == guardaremail:
更优实现方案
你已经提前获取了所有tr元素的列表tabela,可以直接遍历该列表,不需要每次通过索引重新查询元素,既可以避免索引错误,也能提升执行效率:
guardaremail = 'asd@asd' tabela = self.driver.find_elements_by_xpath("/html/body/div[1]/div/table/tbody/tr") for tr in tabela: emailteste = tr.find_element_by_xpath("./td[2]") botaoteste = tr.find_element_by_xpath("./button[1]") if emailteste.text == guardaremail: botaoteste.click() break # 匹配到目标后直接跳出循环,无需遍历剩余元素
内容的提问来源于stack exchange,提问作者Senhor Esteves
相关产品推荐
相关产品推荐

