элемент не виден при нажатии на ссылку в цикле - PullRequest
2 голосов
/ 11 ноября 2019

Я получаю все ссылки из класса odds-co. Затем в цикле я click на каждом из них. Но время от времени я получаю ошибку element not visible. Я понимаю, что это связано со временем. Указание time.sleep () кажется мне не очень правильным подходом. Я думаю, что может как-то использовать webdriver wait, но я не понимаю, как.

rows = driver.find_elements_by_css_selector('.odds-co')
for i in rows:
    i.click()

url - https://www.oddsportal.com/soccer/england/efl-trophy/shrewsbury-macclesfield-WUgMbMnT/#over-under;2

Ответы [ 2 ]

2 голосов
/ 11 ноября 2019

Число строк в таблице равно 15, однако при поиске в DOM отображается значение 16. Over/Under 4.25 is missing.

Вызовите WebDriverWait и presence_of_all_elements_located (), проверьте элемент 12 и продолжите.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Chrome()
driver.get("https://www.oddsportal.com/soccer/england/efl-trophy/shrewsbury-macclesfield-WUgMbMnT/#over-under;2")
rows=WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,".odds-co >a")))
for row in range(len(rows)):

    rows = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".odds-co >a")))
    if row==11:
        continue
    else:
        rows[row].click()

Дайте мне знать, как это происходит.

2 голосов
/ 11 ноября 2019

expected_conditions.visibility_of() получить WebElement в качестве параметра

from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By

wait = WebDriverWait(driver, 10)
rows = driver.find_elements_by_css_selector('.odds-co')
for row in rows:
    wait.until(ec.visibility_of(row)).click()

Вы также можете подождать, пока все строки будут присутствовать

rows = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.table-container:not([style="display: none;"]) .odds-co')))
for row in rows:
    row.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...