#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
Это работает, и я не повторяюсь с «вещами, связанными с выходом из системы», но я думаю, что должен быть лучший способ.
Есть ли?