селектор css селектор не может получить цель, в то время как цель видна и выбирается в режиме проверки - PullRequest
0 голосов
/ 04 февраля 2020

Я смотрю на эту страницу , для входа требуется бесплатная регистрация.

На этой странице я пытаюсь выбрать "# histo-line-chart> g> g .hist-container> g.hist-top-graph> g.hist-spreadlines> g ".

def login():
    url = "https://www.datagrapple.com/Account/Login"
    browser = create_browser(
        r'C:/Users/YOURADDRESS/webdrivers/chromedriver.exe')  # change addr when necessary
    browser.get(url)
    browser.find_element_by_id('UserName').send_keys('EXIA2018') # valid demo
    browser.find_element_by_id('Password').send_keys('102938')
    browser.find_element_by_xpath('//*[@id="loginForm"]/form/fieldset/div[3]/div/button').click()
    return browser

obj_path = '#histo-line-chart > g > g.hist-container > g.hist-top-graph > g.hist-spreadlines > g'
WebDriverWait(browser, 60).until(EC.element_to_be_clickable((By.CSS_SELECTOR, obj_path)))  # added according to NatalSnowyFox's suggestion. 
browser.find_element_by_css_selector(obj_path)

Тогда я получил эту ошибку.

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"histo-line-chart > g > g.hist-container > g.hist-top-graph > g.hist-spreadlines > g"}
  (Session info: headless chrome=79.0.3945.130)

Когда я вставляю этот селектор css в браузер в режиме проверки, он может успешно найти цель.

Я использую Python 3.7.6 и селен 3.141. 0. Я переустановил селен на всякий случай.

Пожалуйста, проведите меня, спасибо, вперед.

обновление 1

добавлены явные коды ожидания в соответствии с предложением NatalSnowyFox, но получена ошибка тайм-аута, даже если я увеличил тайм-аут до 60 секунд

1 Ответ

0 голосов
/ 04 февраля 2020

Вы пытались использовать WebDriverWait (драйвер, время) .until (ваше состояние)? Возможно, браузеру просто нужно время, чтобы найти его, попробуйте использовать явное ожидание.

WebDriverWait(driver, 10).until(EC.visibility_of_element_located(By.CSS_SELECTOR,"your selector"))

Вместо «visibilityOfElementLocated» вы можете использовать любые другие условия (наличие расположенного элемента, видимость, кликабельный элемент..et c зависит от того, что вам нужно)

https://selenium.dev/docs/site/en/webdriver/waits/

...