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
的循环。