如何定位这个元素?
How to locate this element?
我想找到 "NEXT" 按钮。按 class 名称定位无效,因为存在具有相同 class 名称的其他元素。此按钮没有 ID。
我尝试通过 xpath 定位>>包含文本等,它有效。但这不是完美的方式,因为将来可能会翻译该站点,并且 "NEXT" 文本可能看起来完全不同......
大约是最后 2 行。
from time import sleep
import self as self
from selenium import webdriver
from selenium.common.exceptions import ElementClickInterceptedException, StaleElementReferenceException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(executable_path="C:\Chromedriver\chromedriver.exe")
driver.implicitly_wait(1)
driver.get("https://cct-103.firebaseapp.com/")
try:
checkin = WebDriverWait(driver, 1).until(EC.element_to_be_clickable((By.CLASS_NAME, "MuiButton-label")))
checkin.click()
except StaleElementReferenceException:
checkin = WebDriverWait(driver, 1).until(EC.element_to_be_clickable((By.CLASS_NAME, "MuiButton-label")))
checkin.click()
locator = (By.ID, "guestName")
guest_input = driver.find_element(*locator)
guest_input.send_keys("xyz")
next_button = driver.find_element_by_xpath("//*[contains(text(), 'NEXT')]")
next_button.click()
使用 WebDriverWait
和 element_to_be_clickable
以及以下定位器选项。
next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(., 'NEXT')]")))
next_button.click()
有时您可能会遇到拦截异常。
next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(., 'NEXT')]")))
driver.execute_script("arguments[0].click();", next_button)
使用 Css 选择器更新了代码。
next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"button.MuiButtonBase-root")))
next_button.click()
或
next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"button.MuiButtonBase-root")))
driver.execute_script("arguments[0].click();", next_button)
要在文本为 NEXT 的元素上定位并 click()
您必须为 [=14] 引入 WebDriverWait =] 并且您可以使用以下任一项 :
使用CSS_SELECTOR
:
driver.get("https://cct-103.firebaseapp.com/")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.MuiButton-label"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#guestName[name='guestName']"))).send_keys("Virtual107")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.MuiButtonBase-root.MuiButton-root.MuiButton-contained>span.MuiButton-label"))).click()
使用XPATH
:
driver.get("https://cct-103.firebaseapp.com/")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='MuiButton-label']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='MuiButton-label']"))).send_keys("Virtual107")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='MuiButton-label' and text()='NEXT']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
我想找到 "NEXT" 按钮。按 class 名称定位无效,因为存在具有相同 class 名称的其他元素。此按钮没有 ID。
我尝试通过 xpath 定位>>包含文本等,它有效。但这不是完美的方式,因为将来可能会翻译该站点,并且 "NEXT" 文本可能看起来完全不同...... 大约是最后 2 行。
from time import sleep
import self as self
from selenium import webdriver
from selenium.common.exceptions import ElementClickInterceptedException, StaleElementReferenceException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(executable_path="C:\Chromedriver\chromedriver.exe")
driver.implicitly_wait(1)
driver.get("https://cct-103.firebaseapp.com/")
try:
checkin = WebDriverWait(driver, 1).until(EC.element_to_be_clickable((By.CLASS_NAME, "MuiButton-label")))
checkin.click()
except StaleElementReferenceException:
checkin = WebDriverWait(driver, 1).until(EC.element_to_be_clickable((By.CLASS_NAME, "MuiButton-label")))
checkin.click()
locator = (By.ID, "guestName")
guest_input = driver.find_element(*locator)
guest_input.send_keys("xyz")
next_button = driver.find_element_by_xpath("//*[contains(text(), 'NEXT')]")
next_button.click()
使用 WebDriverWait
和 element_to_be_clickable
以及以下定位器选项。
next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(., 'NEXT')]")))
next_button.click()
有时您可能会遇到拦截异常。
next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(., 'NEXT')]")))
driver.execute_script("arguments[0].click();", next_button)
使用 Css 选择器更新了代码。
next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"button.MuiButtonBase-root")))
next_button.click()
或
next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"button.MuiButtonBase-root")))
driver.execute_script("arguments[0].click();", next_button)
要在文本为 NEXT 的元素上定位并 click()
您必须为 [=14] 引入 WebDriverWait =] 并且您可以使用以下任一项
使用
CSS_SELECTOR
:driver.get("https://cct-103.firebaseapp.com/") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.MuiButton-label"))).click() WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#guestName[name='guestName']"))).send_keys("Virtual107") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.MuiButtonBase-root.MuiButton-root.MuiButton-contained>span.MuiButton-label"))).click()
使用
XPATH
:driver.get("https://cct-103.firebaseapp.com/") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='MuiButton-label']"))).click() WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='MuiButton-label']"))).send_keys("Virtual107") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='MuiButton-label' and text()='NEXT']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC