满足特定条件后在for循环中返回一个项目

时间:2020-05-06 01:05:45

标签: python selenium for-loop

我正在使用selenium,并且在函数中必须多次执行一些操作,这里的要点是,当我在该页面上进行40次迭代时,硒中断,我需要重新启动该函数。我已经通过放置一个count变量解决了这个问题,当满足一定数量的迭代次数时,selenium将关闭控制器并重新打开它,但这是问题所在,当这种情况发生时,for循环中count变量遇到的元素重新启动硒时不会出现这种情况,这将转到我列表中的下一项。

这是我的代码:

import os
import time
from selenium import webdriver
def prueba(n=2):

    chromeOptions = webdriver.ChromeOptions()
    chromeOptions.add_experimental_option('useAutomationExtension', False)
    chromeOptions.add_argument('log-level=3')
    chromeOptions.add_argument('--ignore-certificate-errors')
    prefs = {"download.default_directory": os.getcwd(),
                  "directory_upgrade": True}
    chromeOptions.add_experimental_option("prefs", prefs)
    driver = webdriver.Chrome(chrome_options=chromeOptions, desired_capabilities=chromeOptions.to_capabilities(),executable_path='/Users/kev/Documents/Proyectos/Selenium/chromedriver')
    driver.get("https://www.google.com.mx/")


    count = 0

    for i in ['a', 'b', 'c', 'd']:
        if count < n:
            if i == 'a':
                try:
                    driver.get("https://www.youtube.com")
                    print('a')
                    time.sleep(1)
                except Exception as e:
                    print(e)
            elif i == 'b':
                try:
                    driver.get("https://www.facebook.com")
                    print('b') 
                    time.sleep(1)
                except Exception as e:
                    print(e)        
            elif i == 'c':
                try:
                    driver.get("https://www.twitter.com")
                    print('c')
                    time.sleep(1)
                except Exception as e:
                    print(e)   
            else:
                try:
                    driver.get("https://www.instagram.com")
                    print('d')
                    time.sleep(1)
                except Exception as e:
                    print(e)

            count+=1
            print(count)

        else:
            count = 0
            driver.close()
            print('Esperando 5 segundos...')
            time.sleep(2)
            driver = webdriver.Chrome(chrome_options=chromeOptions, desired_capabilities=chromeOptions.to_capabilities(),executable_path='/Users/kev/Documents/Proyectos/Selenium/chromedriver')
            driver.get("https://www.google.com.mx/")
            continue
prueba()

所以在这里,当我运行我的函数时,一切正常,但是当i ='c'时,计数变量满足了,此函数传递给else语句,以重置计数变量和Selenium,并在再次启动时直接进入'd'而不是'c'

1 个答案:

答案 0 :(得分:0)

您的逻辑似乎不正确。您定义的loop的for很难进行四次迭代['a', 'b', 'c', 'd']的设置。每次迭代时,它会将计数加1。当它到达“ c”,即第三次迭代时,计数为2。因此它在第一个条件中失败。

相反,您应该指定一个嵌套的for循环:

n = 2
for _ in range(n):
    for i in ['a', 'b', 'c', 'd']:
        # Do Stuff

或者使用带有计数器的while循环。

n = 2
counter = 0
while counter < n:
   for i in ['a', 'b', 'c', 'd']:
        # Do Stuff
   counter +=1