find_element_by_id:通过ID进行匹配查找,只返回匹配到的一个元素
find_element_by_name:通过name进行匹配查找,只返回匹配到的一个元素
find_element_by_xpath:通过xpath进行匹配查找,只返回匹配到的一个元素
find_element_by_link_text:通过链接内容进行匹配查找,只返回匹配到的一个元素
find_element_by_partical_link_text:通过部分链接内容进行匹配查找,只返回匹配到的一个元素
find_element_by_tag_name:通过标签名称进行匹配查找,只返回匹配到的一个元素
find_element_by_class_name:通过class名称进行匹配查找,只返回匹配到的一个元素
find_element_by_css_selector:通过CSS选择器进行匹配查找,只返回匹配到的一个元素
表达式 | 描述 |
---|---|
/ | 从根节点选取,也就是当前节点的最顶层(默认情况下当前节点是 html 最顶层,若从某元素开始,当前节点为此元素) |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 |
. | 选取当前节点 |
. . | 选取当前节点的父节点 |
@ | 选取属性 |
以 “/” 开头, 让xpath 从文档的根节点开始解析
driver.find_element_by_xpath(“html/body/div/form/input”)
以"//" 开头, 让xpath 从文档的任何元素节点开始解析(也就是说每个节点都作为起点找一下
driver.find_element_by_xpath(“html/body/div/form/input”)
driver.find_element_by_xpath(“//input[1]”)
driver.find_element_by_xpath(“//input[@id=‘username’]”)
driver.find_element_by_xpath(“//input[@type=‘submit’][@name=‘sub1’]”)
driver.find_element_by_xpath(“//input[@type=‘submit’ and @name=‘sub1’]”)
driver.find_element_by_xpath(“//input[@type=‘submit’ or @name=‘sub1’]”)
查找所有input标签中含有type属性的元素
driver.find_element_by_xpath(“//input[@type]”)
查找所有a标签中含有onclick属性的元素
driver.find_element_by_xpath(“//a[@onclick]”)
匹配所有input元素中含有属性的值为readonly的元素
driver.find_element_by_xpath(“//input[@*=‘readonly’]”))
匹配一个属性开始位置的关键字,是模糊定位的一种。
匹配id以submit开头的元素,如:id=‘submit’
driver.find_element_by_xpath(“//input[starts-with(@id,‘submit’)]”)
匹配一个属性结束位置的关键字,是模糊定位的一种。
匹配id以submit结尾的元素,如:id=‘submit’
driver.find_element_by_xpath(“//input[ends-with(@id,‘submit’)]”)
匹配一个属性值中包含的字符串,也是模糊定位的一种。
匹配id中含有submit的元素,如:id=‘submit’
driver.find_element_by_xpath(“//input[contains(@id,‘submit’)]”)
匹配name属性中包含na关键字的页面元素
driver.find_element_by_xpath(“//input[contains(@name,‘na’)]”)
根据文本信息匹配元素位置。
表示div元素->form元素->input元素的最后一个子元素,得到id值为e2的E元素
driver.find_element_by_xpath(“//div[@class=‘class3’][contains(text(),‘div2’)]/…/text()”)
函数位置定位。
表示div元素->form元素->input元素的最后一个子元素,得到id值为e2的E元素
driver.find_element_by_xpath(“/div/form/input[last()]”)
获取标签名称。
表示过虑掉在 div id='query_reulst_box' 的下的 style 标签和 meta 标签
driver.find_element_by_xpath("//div[@id='query_reulst_box']/*[not(name()='style' and name()='meta')]//text())
//*[@id=“content_views”]/p[51]/span[1]/parent::p
//*[@id=“content_views”]/p[51]/span[1]/ancestor-or-self::div
//*[@id=“content_views”]/descendant::span
//*[@id=“content_views”]/p[51]/descendant-or-self::p
//*[@id=“content_views”]/p[51]/preceding::p
//*[@id=“content_views”]/p[51]/span[2]/preceding-sibling::span
//*[@id=“content_views”]/p[51]/following::p
//*[@id=“content_views”]/p[51]/span[2]/following-sibling::span
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上课啦title>
head>
<body>
<p id="abc">浔阳江头夜送客,枫叶荻花秋瑟瑟1p>
<p id="abd">浔阳江头夜送客,枫叶荻花秋瑟瑟2p>
<input name="a1">
<div>
<select>
<option>主人下马客在船,举酒欲饮无管弦option>
<option>醉不成欢惨将别,别时茫茫江浸月option>
<option>忽闻水上琵琶声,主人忘归客不发option>
select>
div>
<a href="http://www.baidu.com">访问百度a>
<span>君既为府吏,守节情不移span>
<span class="a2">鸡鸣入机织,夜夜不得息span>
<div>
<table>
<tr>
<td>
头上玳瑁光,腰若流纨素
td>
tr>
<tr>
<td>
出师未捷身先死,长使英雄泪满襟
td>
tr>
table>
div>
body>
html>
# -*- coding: utf-8 -*-
# @project : day5
# @author: lw
# @file: study.py
# @ide: PyCharm
# @time: 2021/8/1 19:30
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
service = ChromeService(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
fileHtml1 = "file:///Users/liwei/Downloads/%E8%85%BE%E8%AE%AF%E8%AF%BE%E5%A0%8237-38%E6%9C%9F2020-7-8/day2/test.html"
driver.get(fileHtml1)
element_absolute = driver.find_elements("xpath", "/html/body/p")
print("Xpath 绝对径定位: ")
for element in element_absolute:
print(element.text)
print("================================================")
print("Xpath 相对路径定位: ")
element_xiangdui = driver.find_elements("xpath", "//body/p")
for element in element_xiangdui:
print(element.text)
print("================================================")
print("Xpath 索引定位: ")
element_index = driver.find_elements("xpath","//*[@id][2]")
for element in element_index:
print(element.text)
print("================================================")
print("XPATH的属性名称元素: ")
element_attribute = driver.find_elements("xpath", "//*[@id]")
for element in element_attribute:
print(element.text)
print("================================================")
print("XPATH的属性值定位元素: ")
element_attributeValue = driver.find_elements("xpath", "//*[@id='abc']")
for element in element_attributeValue:
print(element.text)
print("================================================")
print("使用任意值来匹配属性及元素: ")
element_any = driver.find_elements("xpath", "//*[@*='a2']")
for element in element_any:
print(element.text)
print("================================================")
print("使用模糊的属性值匹配: ")
element_starts = driver.find_elements("xpath", "//*[starts-with(@id,'a')]")
# end是新语法不是所有浏览器都支持
# element_ends = driver.find_elements("xpath", "//*[ends-with(@id,'d')]")
element_contains = driver.find_elements("xpath", "//*[contains(@id,'a')]")
for element in element_starts:
print("starts-with(@id,'a')" + element.text)
# for element in element_ends:
# print("ends-with(@id,'d')" + element.text)
for element in element_contains:
print("contains(@id,'a')" + element.text)
print("================================================")
print("根据文本信息匹配元素位置: ")
element_text = driver.find_element("xpath", "//*[text()='访问百度']")
print(element_text.text)
print("================================================")
print("last()元素位置: ")
element_last = driver.find_element("xpath", "//*[@id][last()]")
print(element_last.text)
print("================================================")
print("name函数: ")
element_name = driver.find_elements("xpath","//*[not (name()='p' or name()='div')]//*[name()='select']")
for element in element_name:
print(element.text)
print("================================================")
print("常见位置函数: ")
element_parent = driver.find_element("xpath", "//*[@id]/parent::body")
print("parent"+element_parent.tag_name)
element_ancestor = driver.find_element("xpath", "//td/ancestor::tbody")
print("ancestor"+element_ancestor.tag_name)
element_descendant = driver.find_element("xpath", "//div[1]/descendant::option")
print("element_descendant" + element_descendant.text)
'''
//div[1]/descendant::option[3]/preceding::option
//div[1]/descendant::option[3]/preceding-sibling::option
//div[1]/descendant::option[1]/following::option
//div[1]/descendant::option[1]/following-sibling::option
'''
driver.quit()
Xpath 绝对径定位:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
Xpath 相对路径定位:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
Xpath 索引定位:
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
XPATH的属性名称元素:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
XPATH的属性值定位元素:
浔阳江头夜送客,枫叶荻花秋瑟瑟1
================================================
使用任意值来匹配属性及元素:
鸡鸣入机织,夜夜不得息
================================================
使用模糊的属性值匹配:
starts-with(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟1
starts-with(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟2
contains(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟1
contains(@id,‘a’)浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
根据文本信息匹配元素位置:
访问百度
================================================
last()元素位置:
浔阳江头夜送客,枫叶荻花秋瑟瑟2
================================================
name函数:
主人下马客在船,举酒欲饮无管弦
醉不成欢惨将别,别时茫茫江浸月
忽闻水上琵琶声,主人忘归客不发
================================================
常见位置函数:
parentbody
ancestortbody
element_descendant主人下马客在船,举酒欲饮无管弦
Process finished with exit code 0