selenium css 选择器无法获取目标,而目标在检查模式下可见且可选择

我正在查看此页面,需要免费注册才能登录。


在此页面中,我尝试选择“#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 和 selenium 3.141.0。我已经重新安装了硒以防万一。


请指导我完成,谢谢你。


更新 1

根据 NatalSnowyFox 的建议添加了显式等待代码,但即使我将超时时间延长到 60 秒也会出现超时错误


尚方宝剑之说
浏览 51回答 1
1回答

HUX布斯

您是否尝试使用 WebDriverWait(driver, time).until(your condition)?也许浏览器只是需要时间来定位它,尝试使用显式等待。WebDriverWait(driver, 10).until(EC.visibility_of_element_located(By.CSS_SELECTOR,"your selector"))取而代之的是“visibilityOfElementLocated”,您可以使用任何其他条件(定位元素的存在、可见性、可点击元素..等,取决于您的需要)https://selenium.dev/docs/site/en/webdriver/waits/
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python