对于范围(列)中的 j:类型错误:类型为 'WebElement' 的对象没有 len()


for i in range(len(rows)):
columns = rows[i].find_element(by=By.TAG_NAME, value="td")
for j in range(len(columns)):
if columns[j].text == "JKL":
columns[0].click()

我的代码有什么问题?

我想我看到了问题,在这行columns = rows[i].find_element(by=By.TAG_NAME, value="td")中,你只得到一个元素,所以它不能循环通过它。也就是说,columns =具有这些属性的一列元素。.find_element()是问题,因为它只找到一个元素。

错误原因是find_element()返回的是WebElements类型。len()通常不能在webelement上工作,所以你得到一个错误。

如果您试图创建具有<td>标记的行列表,那么您将首先在for i循环之前将列表声明为columns = []。构建列表的那一行看起来像这样:

columns.append(rows[i].find_element(by=By.TAG_NAME, value="td"))

,它会给你一个元素列表。

嵌套的for j循环可能是不必要的;你可能只是比较每个标签,因为你从rows提取它,但我认为find_element()将抛出一个异常在每一行没有标签。我猜你可能应该寻找一个<a>标签,而不是<td>。我没有足够的使用Selenium的经验来更有能力地发言,但我怀疑您可能正在寻找更类似于以下内容的东西:

for i in range(len(rows)):
try:
column = rows[i].find_element(by=By.TAG_NAME, value="td")
except NoSuchElement:
#we expect this exception; do nothing
pass
else:
if column.text == "JKL":
column.click()
break

break应该让你脱离for的循环。

相关内容

  • 没有找到相关文章

最新更新