Встреча с чем-то интересным при попытке настроить веб-драйвер Selenium для очистки статистики фэнтези-футбола из ESPN.Когда я выполняю следующие ячейки в блокноте jupyter, я могу перейти на нужную мне страницу (черновик резюме моей лиги фэнтези) и успешно войти в свой аккаунт, открыв страницу:
# cell 1
driver = webdriver.Firefox()
driver.get(url)
# cell 2
i = 0
iter_again = True
iframes = driver.find_elements_by_tag_name('iframe')
while i < len(iframes) and iter_again:
driver.switch_to_frame(iframes[i])
if (len(driver.find_elements_by_class_name("input-wrapper"))) > 0:
username, password = driver.find_elements_by_class_name("input-wrapper")
iter_again = False
else:
sleep(1)
driver.switch_to_default_content()
i += 1
# Cell 3
username.find_elements_by_tag_name('input')[0].send_keys(espn_username)
password.find_elements_by_tag_name('input')[0].send_keys(espn_password)
# Cell 4
driver.find_elements_by_tag_name('button')[0].click()
# Cell 5
driver.refresh()
Странно то, что когда я помещаю все это в функцию и возвращаю объект webdriver, espn не позволяет мне войти в систему. Я получаю сообщение об ошибке, в котором говорится, что ESPN испытывает технические трудности в настоящее время, и я не могувозможность войти (они правы, я не могу).
Сначала я думал, что это может быть чем-то вроде ограничения скорости, но не могу думать о чем-то отличающемся в HTTP-запросе от функциональной формы от подхода «ячейка за ячейкой».Что бы это ни стоило, я проверил функциональный подход как в среде ноутбука jupyter, так и в автономном режиме через CLI.Какие-нибудь мысли?Мы очень ценим любую помощь / обратную связь!
РЕДАКТИРОВАТЬ - Добавление скрипта, который не выполняется должным образом
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
time import sleep
def get_active_webdriver(url, espn_username, espn_password, headless=False):
driver = webdriver.Firefox()
driver.get(url)
i = 0
iter_again = True
# find iframe with the login info and log in
iframes = driver.find_elements_by_tag_name('iframe')
while i < len(iframes) and iter_again:
driver.switch_to_frame(iframes[i])
if (len(driver.find_elements_by_class_name("input-wrapper"))) > 0:
username, password = driver.find_elements_by_class_name("input-wrapper")
iter_again = False
else:
sleep(1)
driver.switch_to_default_content()
i += 1
username.find_elements_by_tag_name('input')[0].send_keys(espn_username)
password.find_elements_by_tag_name('input')[0].send_keys(espn_password)
driver.find_elements_by_tag_name('button')[0].click()
driver.refresh()
return driver
if __name__ == "__main__":
url = #url here
espn_username = #username
espn_password = #password
driver = get_active_webdriver(url, espn_username, espn_password)