Как не повторяться с python и объектом StatefulBrowser

#python #mechanicalsoup

#питон #механическая защита

Вопрос:

У меня есть скрипт, который автоматизирует некоторые задачи ввода данных на веб-сайте с помощью mechanicalsoup «s StatefulBrowser «. На этом сайте срок действия файлов cookie, используемых для аутентификации, иногда истекает, и когда они это делают, они перенаправляются на страницу входа в систему.

Мой сценарий выглядит примерно так:

 urls={'part1':'https://......',   'part2':'https://......',   'part3':'https://......'}  browser.open(urls['part1']) if "login" in browser.url:  #do stuff related to being logged out  return("need to refresh cookies") #do stuff related to part1  browser.open(urls['part2']) if "login" in browser.url:  #do stuff related to being logged out  return("need to refresh cookies") #do different stuff related to part2  

Моей первой мыслью было добавить метод browser , который сочетает в себе открытие с проверкой, было ли перенаправление, но я не знаю, как это сделать, и при его исследовании, похоже, здравый смысл заключается в том, чтобы не добавлять методы.

Моей второй мыслью было создать функцию, которая принимает browser в качестве входных данных, а также возвращает их. Что — то вроде этого:

 def customopen(browser, url):  browser.open(url)  if "login" in browser.url:  #do stuff related to being logged out  return([False, browser])  else:  return([True, browser])  

Моей третьей мыслью было просто объявить browser функцию глобальной, вот так:

 def customopen(url):  global browser  browser.open(url)  if "login" in browser.url:  #do stuff related to being logged out  return(False)  else:  return(True)  

В итоге я выбрал вариант 3, который делает сценарий похожим на этот:

 if (customopen(urls['part1'])==False): return("need to refresh cookies") #do stuff related to part1 if (customopen(urls['part2'])==False): return("need to refresh cookies") #do different stuff related to part2  

Это работает, и я не повторяюсь с «вещами, связанными с выходом из системы», но я думаю, что должен быть лучший способ.

Есть ли?