使用 Selenium 和 Python 选择与描述文本相对应的元素
Selecting element with respective to the description text using Selenium and Python
我正在尝试使用以下代码在随附的屏幕截图中查找并单击显示 OAT (ADS05....) 的位置:
oatObj = driver.find_element(By.XPATH,"//span[contains(@class, 'treeImg') and contains(., 'OAT ')]")
oatObj.click()
这会弹出以下错误:
ElementNotInteractableException: Message: element not interactable
这个元素绝对是可点击的,代码中的其他地方我使用了类似的 XPATH 匹配,它们确实有效。这个 XPATH 有什么不同之处是任何人都可以看到的吗?这是单击时元素和检查窗格的屏幕截图:
尝试在点击元素之前使用等待
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH,'YourXpath')))
如果有更多元素具有相同的 xpath
,您也可以使用 find_elements
您可以使用 Java 脚本和执行操作来更改点击方式
ElementNotInteractableException: Message: element not interactable
您收到的错误是因为该元素在访问时不可交互。可能是各种原因,有时它不可见并试图点击,有时与其他元素叠加,有时用于视口。
请找到以下解决方案。
#1 使用 WebDriverWait()
oatObj=WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(@class, 'treeImg') and contains(., 'OAT ')]")))
oatObj.click()
#2 使用 Actions class
oatObj=WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(@class, 'treeImg') and contains(., 'OAT ')]")))
ActionChains(driver).move_to_element(oatObj).click().perform()
#3 使用 JavaScripts Executor
oatObj=WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(@class, 'treeImg') and contains(., 'OAT ')]")))
driver.execute_script("arguments[0].click();",oatObj)
请导入以下库:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
innerText 确实包含文本 OAT 但规范地包含文本 starts-with
正文OAT
解决方案
要点击 clickable 元素,理想情况下您需要引入 WebDriverWait for the and you can use the following :
使用 XPATH:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li/span[contains(@class, 'treeImg') and starts-with(., 'OAT')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
我正在尝试使用以下代码在随附的屏幕截图中查找并单击显示 OAT (ADS05....) 的位置:
oatObj = driver.find_element(By.XPATH,"//span[contains(@class, 'treeImg') and contains(., 'OAT ')]")
oatObj.click()
这会弹出以下错误:
ElementNotInteractableException: Message: element not interactable
这个元素绝对是可点击的,代码中的其他地方我使用了类似的 XPATH 匹配,它们确实有效。这个 XPATH 有什么不同之处是任何人都可以看到的吗?这是单击时元素和检查窗格的屏幕截图:
尝试在点击元素之前使用等待
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH,'YourXpath')))
如果有更多元素具有相同的 xpath
,您也可以使用find_elements
您可以使用 Java 脚本和执行操作来更改点击方式
ElementNotInteractableException: Message: element not interactable
您收到的错误是因为该元素在访问时不可交互。可能是各种原因,有时它不可见并试图点击,有时与其他元素叠加,有时用于视口。
请找到以下解决方案。
#1 使用 WebDriverWait()
oatObj=WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(@class, 'treeImg') and contains(., 'OAT ')]")))
oatObj.click()
#2 使用 Actions class
oatObj=WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(@class, 'treeImg') and contains(., 'OAT ')]")))
ActionChains(driver).move_to_element(oatObj).click().perform()
#3 使用 JavaScripts Executor
oatObj=WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(@class, 'treeImg') and contains(., 'OAT ')]")))
driver.execute_script("arguments[0].click();",oatObj)
请导入以下库:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
innerText 确实包含文本 OAT 但规范地包含文本 starts-with
正文OAT
解决方案
要点击 clickable 元素,理想情况下您需要引入 WebDriverWait for the
使用 XPATH:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li/span[contains(@class, 'treeImg') and starts-with(., 'OAT')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC