from selenium import webdriver
from selenium.webdriver.common.by import By
if __name__ == '__main__':
wd = webdriver.Chrome()
wd.implicitly_wait(20)
wd.get("https://cdn2.byhy.net/files/selenium/test1.html")
# 绝对路径选择
element = wd.find_element(By.XPATH, "/html/body/div/select")
print(element.text)
# 加//代表标签为div的元素
element = wd.find_element(By.XPATH, "//div")
print(element.text)
print("-*------------------------------------")
# 找div当中的p
elements = wd.find_elements(By.XPATH, "//div//p")
for e in elements:
print(e.text)
print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
# 找直接div子节点p
elements = wd.find_elements(By.XPATH, "//div/p")
for e in elements:
print(e.text)
# 通配符*
elements = wd.find_elements(By.XPATH, "//div/*")
for e in elements:
print(e.get_attribute("outerHTML"))
# 根据属性选择
element = wd.find_element(By.XPATH, "//*[@id='us']") # 属性是[@属性名='']
print("id=us\n", element.text)
# css写法,style属性包含了某些字段
element = wd.find_element(By.CSS_SELECTOR, "[id*='chigaco']") # *= 代表包含
print(element.text)
# css, 以...开头
element = wd.find_element(By.CSS_SELECTOR, "[id^='chi']")
print(element.text)
# css, 以...结尾
element = wd.find_element(By.CSS_SELECTOR, "[id$='co']")
print(element.text)
# xpath写法,包含contains, 以..开头start-with, 以..结尾ends-with, 不一定能用
elements = wd.find_elements(By.XPATH, "//*[contains(@style,'color')]")
for e in elements:
print(e.text)
# elements = wd.find_elements(By.XPATH, "//*[ends-with(@style, 'lor')]") # 无法使用ends-with, 只能用css语法[@属性名$='']
# for e in elements:
# print(e.text)
# 选择某个类型的第n个
element = wd.find_element(By.XPATH, "//p[2]") # 选择p类型的第二个元素, 若是*[2]则是不管什么类型的第二个元素
print(element.text)
# 选择倒数第n个
element = wd.find_element(By.XPATH, "//p[last()-1]") # 从0开始
print(element.text)
# 范围选择
elements = wd.find_elements(By.XPATH, "//option[position()<=2]") # 选择option的前两个
for e in elements:
print(e.text)
elements = wd.find_elements(By.XPATH, "//option[position()>last()-2]") # 选择option的最后两个
for e in elements:
print(e.text)
# 组选择和兄弟结点
elements = wd.find_elements(By.XPATH, "//option|//h4") # 用|连接,选择所有的option与h4
for e in elements:
print(e.text)
# 选择父节点,css做不到 /..
element = wd.find_element(By.XPATH, "//*[@id='china']/..") # 寻找id为china的结点的父节点
print(element.text)
# 选择兄弟结点
elements = wd.find_elements(By.XPATH, "//*[@class='single_choice']/following-sibling::select") # 寻找class为single_choice的结点的兄弟节点,且兄弟标签为select
for e in elements:
print(e.text)
# 选择前面的兄弟
elements = wd.find_elements(By.XPATH,
"//*[@class='single_choice']/preceding-sibling::p") # 寻找class为single_choice的结点的兄弟节点,且兄弟标签为p
for e in elements:
print(e.text)
# 若从webelement对象中寻找元素,需要在//前面加"."
Python-Selenium学习笔记--根据Xpath选择元素
于 2023-04-26 12:05:55 首次发布