我有一个网页,其中有5个相同的类按钮,并且每页上有500个以上的页面带有相同的按钮,并且我做了一个while循环来单击所有页面。 但是最终在按钮不再可用的结尾,我收到退出错误代码。 我该如何打印例如“没有更多按钮可用”并完成测试。
res = 1
while res < 10000:
buttons = driver.find_elements_by_xpath('//*[@class="btn default check check green markAsChecked"]')
buttons[0].send_keys('\n')
buttons = driver.find_elements_by_xpath('//*[@class="btn default check check green markAsChecked"]')
buttons[1].send_keys('\n')
buttons = driver.find_elements_by_xpath('//*[@class="btn default check check green markAsChecked"]')
buttons[2].send_keys('\n')
buttons = driver.find_elements_by_xpath('//*[@class="btn default check check green markAsChecked"]')
buttons[3].send_keys('\n')
buttons = driver.find_elements_by_xpath('//*[@class="btn default check check green markAsChecked"]')
buttons[4].send_keys('\n')
driver.refresh()
res = res + 1
答案 0 :(得分:2)
尝试使用if..else
条件检查length of button elements
。如果按钮的长度大于零,则进行迭代并执行一些操作,否则打印No more buttons available
并中断。
res = 1
while res < 10000:
buttons = driver.find_elements_by_xpath('//*[@class="btn default check check green markAsChecked"]')
if len(buttons)>0:
for idx in range(len(buttons)):
buttons = driver.find_elements_by_xpath('//*[@class="btn default check check green markAsChecked"]')
buttons[idx].send_keys('\n')
driver.refresh()
res = res + 1
else:
print("No more buttons available")
break
答案 1 :(得分:1)
我将重构您的循环以提高效率,并为您的按钮列表引入一个索引变量:
from selenium.common.exceptions import NoSuchElementException
res = 1
while res < 10000:
# find buttons list
buttons = driver.find_elements_by_xpath('//*[@class="btn default check check green markAsChecked"]')
# iterate and send keys to buttons[0], buttons[1], etc..
for i in range(0,4):
try:
buttons[i].send_keys('\n')
# find buttons again, in case buttons element list goes stale
buttons = driver.find_elements_by_xpath('//*[@class="btn default check check green markAsChecked"]')
except NoSuchElementException: # case: button does not exist
break
driver.refresh()
res = res + 1
现在,我们没有使用buttons[0].send_keys
,buttons[1].send_keys
一直到buttons[4]
的方式,而是使用从0到4的for循环来完成此操作,执行button[i].send_keys
。
在for
循环中,我们重新运行对buttons = driver.find_elements...
的调用,以便我们可以刷新列表中的按钮元素。这是为了处理在您遍历按钮时可能出现的StaleElementReferenceException
。
我们还将button[i].send_keys
包装在try
/ except
块中,以捕获NoSuchElementException
来处理页面上不存在按钮的情况。一旦不再找到按钮,代码将从break
循环中for
退出,并继续在while
循环中执行。
需要注意的事情-这将不处理页面上少于或少于 5个按钮的情况。如果按钮的数量可能会发生变化,我们想使用for button in buttons:
而不是for i in range(0,4)
。如果是这种情况,请告诉我,以便我可以重构代码。