【问题标题】:How do you get a python script to repeat x times over again?如何让 python 脚本再次重复 x 次?
【发布时间】:2019-08-20 18:00:54
【问题描述】:

我需要再次运行一个 python 脚本 10 次,但脚本最后总是返回一个故意的错误。这会停止脚本,因此我不能使用 for 或 while 循环来重复脚本。出现错误是因为我在我的网站上设置了随机数量的问题,最多 7 个问题。所以我创建了一个while循环来点击一个元素7次,但是如果生成的问题数量较少,它会返回一个错误,即找不到该元素。因此,不知何故,我需要帮助忽略此错误,或者能够再次运行整个 .py 文件 10 次,例如重新启动脚本。

我也尝试过使用 try/catch 或 except 语句来忽略错误,但它不起作用。

这是出现错误的部分:

b = 6
i = 0
    try:
        while i < b:
            print("We're in")
            time.sleep(2)
            Pass_box = driver.find_element_by_class_name('btn-chat')
            Pass_box.click()
            try:
                Cool_box = driver.find_element_by_class_name(
'message-submit'
)
                Cool_box.click()
            except:
                print("")
            i = i + 1
            print(i)
        driver.get('http://127.0.0.1:8000/')
        g = g + 1
    except IOError:
        driver.get('http://127.0.0.1:8000/')
        g = g + 1

g + 1,在我尝试进行 while 循环时使用。

【问题讨论】:

  • 分享您遇到的错误
  • 尝试将whiletry 切换为trywhile 内。处理您期望的尽可能多的特定异常,并在末尾放置一个通用的except 以捕获丢失的异常。记录该意外异常,以便您了解它。最后,使用finally g = g + 1

标签: python selenium loops


【解决方案1】:

你试过用你的while交换第一个try吗?并在您的第一次try 中添加一个通用异常?这将防止任何执行错误。

提示:在您的问题上分享您的错误。

b = 6
i = 0
    while i < b:
        try:
                print("We're in")
                time.sleep(2)
                Pass_box = driver.find_element_by_class_name('btn-chat')
                Pass_box.click()
                try:
                    Cool_box = driver.find_element_by_class_name('message-submit')
                    Cool_box.click()
                except:
                    print("")
                i = i + 1
                print(i)
            driver.get('http://127.0.0.1:8000/')
            g = g + 1
        except Exception:
            driver.get('http://127.0.0.1:8000/')
            g = g + 1

【讨论】:

    【解决方案2】:

    我想我找到了答案。因此,我没有使用固定次数重复循环 (7),而是使用 selenium 从我的网站中提取数字。这样就不会出现错误。我还想出了另一种解决方案,即只使用简单的 try/except 语句(不包括 IOError),但我最终没有使用它,因为如果出现实际错误我不知道。不过还是感谢您的帮助。

    (编辑): 我用来拉数字的代码是

    Numbers_Element = browser.find_elements_by_xpath(“//a[@class=’Enter a class here’]”)
    Number = Numbers_Element.text
    Number_refined = int(filter(str.isdigit, Number))
    

    然后我在循环中使用了 number_refined:

    While i < Number_refined:
        ...
    

    【讨论】:

      【解决方案3】:

      您应该首先计算每次循环中的问题数。

      questions_count = len(driver.find_elements_by_class_name('message-submit'))
                                              ^^
      

      像这样:

      while time < 10:
          questions_count = len(driver.find_elements_by_class_name('message-submit'))
          while i < questions_count:
              .......
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-06
        • 2019-07-09
        • 2011-02-26
        • 2020-09-04
        • 2011-04-15
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多