尝试单击元素时出现“ ElementNotVisibleException”和“ InvalidSelectorException:无效选择器:不允许使用复合类名称”

时间:2018-09-10 22:36:54

标签: python-3.x selenium selenium-webdriver xpath css-selectors

我正在尝试自动从公司的Web门户下载信息。我需要指定一个自定义日期范围(在代码的其他部分)。

页面html的格式如下

<div id="datePickerIconWrap" class="float_lang_base_2 datePickerIconWrap"><span class="datePickerIcon">&nbsp;</span></div>

我尝试用class_nameid指定项目;但都失败了

import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
url = '<my url>'

driver = webdriver.Chrome("Y:/Users/admin/Documents/chromedriver.exe")
driver.get(url)
driver.find_element_by_id('datePickerIconWrap').click()    
driver.find_element_by_class_name('float_lang_base_2 datePickerIconWrap').click()

我收到以下有关.find_element_by_id的错误消息

ElementNotVisibleException: Message: element not visible

我收到以下有关.find_element_by_class的错误消息

InvalidSelectorException: Message: invalid selector: Compound class names not permitted
(Session info: chrome=68.0.3440.106)

1 个答案:

答案 0 :(得分:0)

关于错误:

  • 此错误消息ElementNotVisibleException: Message: element not visible表示所需的元素在HTML DOM中不可见。
  • 此错误消息InvalidSelectorException: Message: invalid selector: Compound class names not permitted表示您改编的Locator Strategy无效。

解决方案

要在所需元素上调用click(),可以使用以下任一解决方案:

  • CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.float_lang_base_2.datePickerIconWrap>span.datePickerIcon"))).click()
    
  • XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='float_lang_base_2 datePickerIconWrap']/span[@class='datePickerIcon']"))).click()
    

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC