我要删除所有代码='A'记录,下面是我的脚本,问题是,当我删除记录1235时,1236将成为第二行(之前是第三行)。所以当i = 3时,1236不会被删除,1237将被删除。怎么解决?提前谢谢!
for i in range(1,20):
client=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='client_Name ng-binding'][1]").text
code=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='ng-binding'][1]").text
if client!='A':
continue
#delete action
driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@name='Project']//i[@class='fa fa-trash']").click()
答案 0 :(得分:1)
通过递增索引和删除元素来迭代列表或数组是很棘手的,因为正如您所发现的,删除元素会更改具有更高索引的元素的索引。
解决方案是反向迭代,从最高索引开始并递减它。这样删除元素不会影响尚未访问过的元素的索引。
for i in range(19, 0, -1):
client=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='client_Name ng-binding'][1]").text
code=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='ng-binding'][1]").text
if client!='A':
continue
#delete action
driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@name='Project']//i[@class='fa fa-trash']").click()
答案 1 :(得分:0)
这不是你必须放的条件,它是一段时间:
for i in range(1,20):
client=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='client_Name ng-binding'][1]").text
code=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='ng-binding'][1]").text
while client!='A':
driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@name='Project']//i[@class='fa fa-trash']").click()
client=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='client_Name ng-binding'][1]").text
这意味着你在同一条线上循环直到它不是'A',然后你继续前进。