我正在尝试使用selenium webdriver单击页面上的返回按钮。有时,由于加载,它可能会在第一次失败,所以我将代码放在while try except块中,以便在失败后重试:
while True:
try:
driver.find_element_by_class_name("back_button")
driver.click()
except:
time.sleep(1)
print("Unable to go back")
continue
break
理想情况下,当try块中的部分成功执行时,代码应该继续前进,但我发现有时它仍然试图单击go back按钮,而此时它已经在上一个页面上。然后它会永远卡在while循环中,因为该页面上没有go back按钮。这可能是什么潜在的原因?
如果您的代码第一次由于加载而失败,就像您在问题描述中所说的那样,将其包装在try
/except
中,并用while(true)
循环包围,这不是一个处理此问题的好方法,因为您最终可能会遇到某些情况,使您陷入while(true)
循环。
在单击之前,最好只在要加载的元素上调用WebDriverWait
。在try
/除了
中包装东西应该是最后的选择。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# need the above import statements
back_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, "back_button")))
back_button.click()
# alternative -- if this code STILL throws ElementNotInteractable, try the below:
# driver.execute_script("arguments[0].click();", back_button)
# ^ this clicks with Javascript, which can work around ElementNotInteractable.
如果您真的希望将其封装在try
/except
块中,以检查back_button
在10秒内未加载的情况,可以使用以下命令:
from selenium.common.exceptions import TimeoutException
# import the exception you need to catch
try:
back_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, "back_button")))
back_button.click()
except TimeoutException: # WebDriverWait throws TimeoutException if it fails
print("back_button did not appear on page within 10 seconds.")
如果您的click()
确实只是由于加载问题而失败,那么上面的代码应该完全消除了您对try
/除了
以外的的需要。
另外值得一提的是,除了我在您的问题上留下的注释之外--在没有任何异常的情况下使用
except:
来捕获是非常危险的做法,因为您真的不知道代码为什么会失败。以后在使用exception:
时,您应该查找特定的异常,例如exception:
或exception:nosuchelementexception:
。这将使您免于今后的调试噩梦。
while循环开始之前的语句没有打印,并且从1开始没有打印循环中的值。相反,它从一个随机的大int开始打印。
编辑:该问题与fscanf的while循环没有直接关系,而是在用于包含使用fscanf加载的变量的结构的分配中出现了错误 我正在从文件中读取值,并使用它们在使用fscanf的结构中设置参数。我使用Eclipse作为编辑器,并将其调试和gcc作为编译器(从Eclipse内部)。 我下面介绍的由三部分组成:1)我从文件中读入变量的结构的声明。2)我正在读取的文件,以及3)实际从文件中读取的代码。 在所
我是Java新手。我正在尝试遍历一个文件并将每个字符串写入ArrayList。为此,我有如下代码: 然而,由于某种原因,这段代码陷入了无限循环。即使我将打印语句作为当块的第一行,它也不会执行。 accountData.txt文件是这样排列的: 我已经读了很多遍,经常读到这是个问题,因为人们没有用Scanner.next()来移动指针,但我相信我正在这样做。我不知道哪里出了问题。 感谢您的帮助!
下面的代码循环了两次。第一个while循环要求用户输入(以做出选择)。我把选择默认值设置为“n”,使它变得更简单。 因此,它命中if语句并开始第2个while循环。现在它要求用户进行另一个选择。用户只能输入“a”,因为其他任何东西都会出现错误陷阱。用户输入“a”并得到添加一个数字的提示(变量num=0)。用户输入一个数字。 使用更多信息更新的代码 我已经尝试使用不同的变量进行选择。它不起作用。我想
这段代码是为一个基本的杂货计算器的按钮。当我按下按钮时,一个输入对话框显示您在哪里输入您的商品价格。我遇到的问题是,我不知道如何获得循环,使输入对话框在输入后弹出。 我希望它总是回来,除非用户选择ok与nothing或cancel,在这种情况下,循环应该中断并填充剩余的框。使用当前的代码,我必须每次手动按下按钮来恢复对话框。我一直在玩不同的while条件和if语句,但我似乎无法让它发挥作用。我是一
我目前有两个循环,一个获取时间戳,另一个while循环根据时间戳查找映射信息并以某种方式输出。 我的问题是我目前正在循环浏览一个文本,并希望它在第二个循环的isdo="N"时再次从头开始读取文件,但是,情况似乎并非如此。 迄今为止的代码: