【问题标题】:Python instantly closes when using for loop in selenium在 selenium 中使用 for 循环时,Python 会立即关闭
【发布时间】:2021-02-12 10:33:04
【问题描述】:

我正在尝试创建一个项目,女巫会自动填写出勤表。我今天学会了如何使用 selenium,所以代码看起来很糟糕。我的问题是我试图提交多个回复以填写我所有的 5 个时期。因此,我使用 for 循环为 5 个响应中的每一个输入正确的时间段。我的问题是,任何缩进比第一个缩进更远的代码似乎都会在打开 python 后立即关闭。

for i in range(0,5):
if i == 0:
    formPeriodTwo = driver.find_element_by_xpath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[2]/div[4]/span')
    formPeriodTwo.click()
    time.sleep(1)
elif i == 1:
    formPeriodTwo = driver.find_element_by_xpath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[2]/div[5]/span')
    formPeriodTwo.click()
    time.sleep(1)
elif i == 2:
    formPeriodTwo = driver.find_element_by_xpath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[2]/div[7]/span')
    formPeriodTwo.click()
    time.sleep(1)
elif i = 3:
    formPeriodTwo = driver.find_element_by_xpath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[2]/div[8]/span')
    formPeriodTwo.click()
    time.sleep(1)
elif i = 4:
    formPeriodTwo = driver.find_element_by_xpath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[2]/div[9]/span')
    formPeriodTwo.click()
    time.sleep(1)

我只是根据“i”是什么从下拉菜单中按下不同的选项。 当我之前尝试使用 if 语句时也发生了这种情况,但我能够解决 if 语句。 if 语句可能是问题所在吗? 如果我注释掉 python 打开并完成它的工作的四个循环。但是如果 for 循环在,python 会立即关闭。什么可能导致这种情况?硒是否会停止循环?我是不是用错了 for 循环?

经过更多测试,我发现 这有效,以后可以作为函数调用

def printTest():
print("hello")

还有这个

def printTest():
print("hello")
for i in range(0,4):
    print("world")

这意味着关于特定 for 循环的某些东西正在搞乱 python

提前感谢您的帮助!

【问题讨论】:

  • 您能否更正缩进以确保它与您的实际代码相匹配,并在命令行中使用python 命令运行您的代码,以便提示符保持打开状态,以便您收到错误消息。我假设您当前正在通过双击脚本来运行它?

标签: python python-3.x selenium web webautomation


【解决方案1】:

你的缩进不对,应该是这样写的。

for i in range(0,5):
    elif i == 1:
       formPeriodTwo = driver.find_element_by_xpath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[2]/div[5]/span')
       formPeriodTwo.click()
       time.sleep(1)

这就是应该如何为所有人更改缩进。

【讨论】:

    【解决方案2】:

    简单循环,获取第i个索引对应的xpath。

    lst=[4,5,7,8,9]
    for i in lst:
        try:
            formPeriod= driver.find_element_by_xpath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[2]/div[{}]/span'.format(i))
            formPeriod.click()
            time.sleep(1)
        except:
            print('Invalid')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-22
      • 2022-01-16
      • 2018-07-30
      • 2021-10-26
      • 2021-08-14
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多