selenium自动化

8种常用元素定位方式

定位方式 语法示例 适用场景
ID find_element(By.ID, "id_value") 元素有唯一ID时优先使用(最快、最稳定)
Name find_element(By.NAME, "name_value") 表单元素(如
Class Name find_element(By.CLASS_NAME, "class") 通过CSS类名定位(注意类名可能重复)
Tag Name find_element(By.TAG_NAME, "div") 通过标签名定位(如
Link Text find_element(By.LINK_TEXT, "登录") 精确匹配超链接文本(全文本匹配)
Partial Link Text find_element(By.PARTIAL_LINK_TEXT, "登") 超链接文本模糊匹配(部分文本)
CSS Selector find_element(By.CSS_SELECTOR, "#id .class") 复杂结构定位(灵活性强)
XPath find_element(By.XPATH, "//div[@id='id']") 层级复杂或缺少其他属性的元素

id定位

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")
element = driver.find_element(By.ID, "username")  # 定位ID为username的元素

css selector

# 定位ID为container下的第一个button
button = driver.find_element(By.CSS_SELECTOR, "#container > button")

# 定位包含特定class的div
div = driver.find_element(By.CSS_SELECTOR, "div.error-message")

xpath定位

# 绝对路径(不推荐,易受页面结构调整影响)
abs_path = driver.find_element(By.XPATH, "/html/body/div[1]/form/input")

# 相对路径(推荐)
rel_path = driver.find_element(By.XPATH, "//input[@name='email']")

# 包含文本定位
text_element = driver.find_element(By.XPATH, "//button[contains(text(),'提交')]")

element = driver.find_element(By.XPATH,"//input[@name='email']")

若ID是动态生成的(如 id="button-12345"),可使用 部分属性匹配:

# CSS Selector模糊匹配
element = driver.find_element(By.CSS_SELECTOR, "[id^='button-']")  # id以button-开头

# XPath模糊匹配
element = driver.find_element(By.XPATH, "//*[contains(@id, 'button-')]")

登录页面代码

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

driver = webdriver.Chrome()
driver.get("https://example.com/login")

# 显式等待用户名输入框
username = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "username"))
)
username.send_keys("testuser")

# 定位密码输入框(通过name属性)
password = driver.find_element(By.NAME, "password")
password.send_keys("mypassword")

# 定位登录按钮(通过CSS Selector)
login_button = driver.find_element(By.CSS_SELECTOR, "button.login-btn")
login_button.click()

# 验证登录成功
assert "Dashboard" in driver.title

文本输入与清除指令

send_keys(text) 向输入框输入文本 element.send_keys("Hello")
clear() 清空输入框内容 element.clear()
send_keys(Keys.RETURN) 模拟回车键 element.send_keys(Keys.RETURN)
send_keys(Keys.TAB) 模拟Tab键跳转 element.send_keys(Keys.TAB)

点击与交互

click() 点击元素(按钮/链接等) button.click()
submit() 提交表单(适用于
内的元素)
form_element.submit()
double_click() 双击元素(需ActionChains) ActionChains(driver).double_click(element).perform()
context_click() 右键点击(需ActionChains) ActionChains(driver).context_click(element).perform()

元素状态获取
is_displayed() 检查元素是否可见 if element.is_displayed():
is_enabled() 检查元素是否可交互 if element.is_enabled():
is_selected() 检查复选框/单选框是否选中 if checkbox.is_selected():
get_attribute("attr") 获取元素属性值 href = link.get_attribute("href")
text 获取元素文本内容 print(element.text)
value_of_css_property() 获取CSS属性值 color = element.value_of_css_property("color")

posted @ 2025-06-11 19:29  呆呆酱  阅读(41)  评论(0)    收藏  举报