Селен возвращается на предыдущую страницу в цикле for - PullRequest
1 голос
/ 05 августа 2020

Я делаю парсер, чтобы очистить сайт ставок на предмет его данных. Это пример кода, который будет очищать событие, команды и коэффициенты. Идея состоит в том, чтобы перебрать все соревнования, доступные для данного вида спорта. Я могу найти ссылки и щелкнуть по первой, затем я также могу очистить данные и вернуть их в виде списка (для последующего размещения в базе данных). Моя проблема в том, что я не могу вернуться на предыдущую страницу, чтобы щелкнуть следующую ссылку, я получаю сообщение об ошибке при попытке сделать это . Вот мой код:

driver = webdriver.Chrome(Path)
driver.get("https://www.neds.com.au/sports/table-tennis/")
a = []

links = driver.find_elements_by_class_name("matches-filter__link")

for l in links:
    
    l.click()
    tt_matches = driver.find_elements_by_class_name("sport-event-card")
    for match in tt_matches:
        Match = match.find_element_by_css_selector(".sports-event-title__name-text").text
        a.append(Match)
        Teams = match.find_elements_by_css_selector(".price-button")
        for team in Teams:
            team_name = team.find_element_by_css_selector(".price-button-name").text
            team_odd = team.find_element_by_css_selector(".price-button-odds-price span").text
            a.append(team_name)
            a.append(team_odd)
    driver.back()
    time.sleep(2)

driver.quit()

, и он возвращает эту ошибку:

поднять класс исключения (сообщение, экран, трассировка стека)

StaleElementReferenceException: ссылка на устаревший элемент: элемент не прикреплен к документу страницы (Информация о сеансе: chrome = 84.0.4147.105)

Как я могу это исправить, я думаю, проблема связана с driver.back (), я также пробовал l.back (), и он все еще не работает.

1 Ответ

2 голосов
/ 05 августа 2020

В этом случае вам нужно собрать URL-адреса, а затем перейти к ним. вы можете использовать следующий код:

driver.get("https://www.neds.com.au/sports/table-tennis/")
time.sleep(5)
a = []

links = driver.find_elements_by_class_name("matches-filter__link")
urls = [l.get_attribute('href') for l in links]
for u in urls:
    print(u)
    driver.get(u)
    tt_matches = driver.find_elements_by_class_name("sport-event-card")
    for match in tt_matches:
        Match = match.find_element_by_css_selector(".sports-event-title__name-text").text
        a.append(Match)
        Teams = match.find_elements_by_css_selector(".price-button")
        for team in Teams:
            team_name = team.find_element_by_css_selector(".price-button-name").text
            team_odd = team.find_element_by_css_selector(".price-button-odds-price span").text
            a.append(team_name)
            a.append(team_odd)
    time.sleep(2)

print(a)
driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...