Селен в тетради против сценария - PullRequest
0 голосов
/ 22 декабря 2018

Встреча с чем-то интересным при попытке настроить веб-драйвер 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...