Selenium元素是不可点击的,即使在明确等待之后也是如此



我试图打开一个表单,等待它的所有元素被加载并填充表单的字段之一。表单正在加载,我正在设置一个WebdriverWait来显式地等待我的元素被点击。但是在element。click()中我得到了异常

Element...is not clickable at the point

我使用的代码示例:

def fill_element(driver, xpath, keys, secs=2000):
print(f"nFilling for {xpath}...")
elem = WebDriverWait(driver, secs).until(EC.element_to_be_clickable((By.XPATH, xpath)))
elem.clear()
elem.click()
elem.send_keys("")
elem.send_keys(keys)

如果我没有用"点击"只是试着发送密钥,什么都没发生。无例外,无需填写表格。

谁能告诉我如何正确使用Wait ?

注:窗口甚至在点击表单打开之前就被最大化了,所以这应该不是问题。

乌利希期刊指南完整代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pathlib import Path
import time
def fill_element(driver, xpath, keys, secs=2000):
print(f"nFilling for {xpath}...")
element = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, xpath)))
driver.find_element_by_xpath(xpath).send_keys("test")

def authorize(driver):
email = "xxx"
pwd = "xxx"
my_acc_button = driver.find_element(By.XPATH, "//li[@class='menuOverride showLoginPopUp menu-account-icon']")
my_acc_button.click()
email_xpath = "// INPUT[@ type='email']"
fill_element(driver, email_xpath, email)
pwd_xpath = "// INPUT[@ type='password']"
fill_element(driver, pwd_xpath, pwd)
login_button = driver.find_element(By.XPATH, "//div[@class='btn green-color']")
# login_button.click()

driver_path = r'D:Projectscheater_buster_parserutilschromedriver.exe'
driver = webdriver.Chrome(driver_path)
driver.maximize_window()
start_url = 'https://www.cheaterbuster.net/'
driver.get(start_url)
authorize(driver)

根据新的更新,使用如下:


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pathlib import Path
import time
def fill_element(driver, xpath, keys, secs=2000):
print(f"nFilling for {xpath}...")
element = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, xpath)))
driver.find_element_by_xpath(xpath).send_keys("test")

def authorize(driver):
email = "xxx"
pwd = "xxx"
my_acc_button = driver.find_element(By.XPATH, "//li[@class='menuOverride showLoginPopUp menu-account-icon']")
my_acc_button.click()
email_xpath = "(//INPUT[@type='email'])[2]"
fill_element(driver, email_xpath, email)
pwd_xpath = "(//INPUT[@type='password'])[3]"
fill_element(driver, pwd_xpath, pwd)
login_button = driver.find_element(By.XPATH, "//div[@class='btn green-color']")
# login_button.click()

driver_path = r'D:Projectscheater_buster_parserutilschromedriver.exe'
driver = webdriver.Chrome(driver_path)
driver.maximize_window()
start_url = 'https://www.cheaterbuster.net/'
driver.get(start_url)
authorize(driver)

使用以下代码,但要确保此元素是要单击的按钮还是文本字段,然后向其发送键。(根据你的信息,我认为它的文本字段

def fill_element(driver, xpath, keys, secs=2000):
print(f"nFilling for {xpath}...")
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "xpath")))
elem=driver.find_element_by_xpath(xpath)
elem.clear()
elem.click()
elem.send_keys("")

最新更新