我正在嘗試打開一個表單,等待它的所有元素被加載并填寫表單的一個欄位。表單正在加載,我正在設定 WebdriverWait 以顯式等待我的元素可點擊。但是在 elem.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 嗎?
PS Window 甚至在單擊表單打開之前就已最大化,所以這應該不是問題。
UPD完整代碼:
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:\Projects\cheater_buster_parser\utils\chromedriver.exe'
driver = webdriver.Chrome(driver_path)
driver.maximize_window()
start_url = 'https://www.cheaterbuster.net/'
driver.get(start_url)
authorize(driver)
uj5u.com熱心網友回復:
根據新的更新,使用以下內容:
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:\Projects\cheater_buster_parser\utils\chromedriver.exe'
driver = webdriver.Chrome(driver_path)
driver.maximize_window()
start_url = 'https://www.cheaterbuster.net/'
driver.get(start_url)
authorize(driver)
uj5u.com熱心網友回復:
使用以下代碼,但請確保此元素是單擊按鈕還是文本欄位,然后將鍵發送給它。(根據您的資訊,我認為它的文本欄位
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("")
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/466295.html
