Возврат на один элемент раньше в течение l oop после выполнения определенного условия - PullRequest
0 голосов
/ 06 мая 2020

Я работаю с селеном, и внутри своей функции мне приходится выполнять некоторые операции несколько раз, дело в том, что когда я получаю 40 итераций на этой странице, селен ломается, и мне нужно перезапустить функцию. Я уже решил это, поместив переменную count, которая при достижении определенного количества итераций селен закроет контроллер и снова откроет его, но вот проблема, когда это произойдет, элемент в for l oop, где Переменная 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()

Итак, вот когда я запускаю свою функцию, все работает нормально, но когда я = 'c', переменная count соответствует, здесь функция переходит к оператору else, сбрасывая переменную count и Selenium, а при повторном запуске она переходит прямо в 'd' вместо продолжения с 'c'

1 Ответ

0 голосов
/ 06 мая 2020

Ваш лог c кажется неправильным. Определяемый вами for loop жестко настроен на выполнение четырех итераций ['a', 'b', 'c', 'd']. На каждой итерации он добавляет к счетчику 1. Когда он достигает 'c', 3-й итерации, счетчик равен 2. Таким образом, первое условие не выполняется.

Вместо этого вы должны указать либо вложенный для l oop:

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

Или используйте while l oop со счетчиком.

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