Ошибка ElementNotVisibleException в веб-драйвере Python/Selenium

Я пишу этот код для работы в Интернете:

browser.find_element_by_class_name('open_all_j').click()

Эта строка кода дает мне ошибку:

selenium.common.exceptions.ElementNotVisibleException: Сообщение: элемент не виден

Мой полный код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common import keys, action_chains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup as soup
import xlwt
def click_time():
    browser = webdriver.Chrome("./Drivers/chromedriver.exe")
    browser.implicitly_wait(20)
    browser.get("https://www.geegeez.co.uk/race-cards/#display=cards&day=0")

    timeTable = browser.find_elements_by_class_name('meeting')
    timeRow = timeTable[0].find_element_by_class_name("races")
    timeRowTable = timeRow.find_elements_by_class_name("race_card_race")
    timeRowTD = timeRowTable[0].find_elements_by_xpath("//table")
    x = timeRowTable[0].find_element_by_class_name("cardstable")
    y = x.find_element_by_class_name("racetime")
    y.click()
    print('\n', len(browser.find_elements_by_id('tabs-cards')), '\n')
    wait = WebDriverWait(browser, 20)
    elem = wait.until(EC.presence_of_element_located((By.ID, "tabs-cards")))
    #browser.find_element_by_xpath("//div[@class = 'open_all_r']").click() #find_element_by_class_name('open_all_r')
    browser.find_elements_by_class_name('open_all_j')[0].click()
    browser.find_elements_by_class_name('open_all_t')[0].click()

Я пытался использовать:

browser.find_element_by_xpath("//div[@class = 'open_all_r']").click()

Эта строка кода дает мне ту же ошибку.

Пожалуйста, помогите мне...

3 ответа

Это может произойти из-за многих причин, как элемент не прокручивается в поле зрения

driver.execute_script("arguments[0].scrollIntoView();", element)

Если это не помогло, попробуйте java-скрипт.

driver.execute_script("arguments[0].click();", element)

Во -первых, попытайтесь понять, что это за исключение. Скорее всего, это связано с двумя причинами - "причина-1": возможно, страница прокручивается неправильно. "решение": используйте "javascriptexecutor" для прокрутки страницы (решение предоставлено другими выше. "причина-2": возможно, страница загружена не полностью (я также застрял в этой проблеме). В этом случае решение заключается в том, что вы нужно дождаться полной загрузки страницы с помощью метода сна в теме.thread.sleep (5000)

По многим причинам возможно, что когда вы пытаетесь щелкнуть элемент, он может быть невидим / не активен к этому времени.

Как я преодолел эту ситуацию, так это с помощью метода расширения для FindElement и FindElements (код на C#, вы можете написать эквивалент на python):

public static void FindElement(this IWebDriver driver, By by, int timeout)
{
   if(timeout >0)
    {
        return new WebDriverWait(driver, TimeSpan.FromSeconds(timeout)).Until(ExpectedConditions.ElementToBeClickable(by));
    }

 return driver.FindElement(by);
}

 public static IReadOnlyCollection<IWebElement> FindElements(this IWebDriver driver, By by, int timeout)
{
   if(timeout >0)
    {
        return new WebDriverWait(driver, TimeSpan.FromSeconds(timeout)).Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(by));
    }

 return driver.FindElements(by);
}

и вы можете назвать это как:

driver.FindElement(By.Xpath("xpath"), timeout).Click();
Другие вопросы по тегам