selenium快速入门

一、操作浏览器

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 设置选项
q1 = Options()
q1.add_argument("--no-sandbox")
q1.add_experimental_option("detach", True)

# 创建并启动浏览器
a1 = webdriver.Chrome(service=Service(r"浏览器驱动的地址"), options=q1)

# 使用浏览器打开指定的网页
a1.get("http://baidu.com/")

二、元素定位

元素定位有两个函数:find_element() 和 find_elements()

find_element():在网页中找出首个符合指定条件的元素(找到的话返回结果,找不到的话报错)

find_elements():在网页中找出所有符合指定条件的元素(找到的话返回列表形式,找不到的话返回空列表)

1.ID

python 复制代码
# 示例
a1.get("http://baidu.com/")
a1.find_element(By.ID, "kw").send_keys("nihao")

(1) 通过ID定位元素,一般比较准确

(2) 并不是所有网页或者元素都有ID值

(3) send_keys()函数是在输入框中输入文字

2.NAME

python 复制代码
# 示例
a1.get("http://baidu.com/")
a1.find_element(By.NAME, "wd").send_keys("nihao")

(1) 通过NAME定位元素,一般比较准确

(2) 并不是所有网页或者元素都有NAME值

3.CLASS_NAME

python 复制代码
# 示例1
a1.get("http://baidu.com/")
a1.find_element(By.CLASS_NAME, "s_ipt").send_keys("nihao")

# 示例2
a1.get("https://bilibili.com/")
a1.find_elements(By.CLASS_NAME, "channel-icons__item")[1].click()

(1) class值不能有空格,否则会报错

(2) class值重复的有很多,需要切片 console -> document.getElementsByClassName()

(3) class值有的网站是随机的

4.TAG_NAME

python 复制代码
# 示例
a1.get("https://baidu.com")
a1.find_elements(By.TAG_NAME, "input")[7].send_keys("tag")

(1) 查找<开头标签名字>

(2) 重复的标签名字特别多,需要切片

python 复制代码
# 示例
a1.get("https://baidu.com/")
a1.find_element(By.LINK_TEXT, "新闻").click()

(1) 通过精确链接文本找到标签a的元素

(2) 如果有重复的文本,则需要切片

python 复制代码
# 示例
a1.get("https://bilibili.com/")
a1.find_element(By.PARTIAL_LINK_TEXT, "音").click()

(1) 通过精确链接文本找到标签a的元素[模糊文本定位]

(2) 如果有重复的文本,则需要切片

7.CSS_SELECTOR

python 复制代码
# 示例
a1.get("https://baidu.com/")
# (1) #id = # + id -> 通过ID定位
a1.find_element(By.CSS_SELECTOR, "#kw").send_keys("css")
# (2) .class = . + class -> 通过CLASS定位
a1.find_element(By.CSS_SELECTOR, ".s_ipt").send_keys("css")
# (3) 不加修饰符 = 标签头 -> 通过TAG_NAME定位
a1.find_elements(By.CSS_SELECTOR, "input")[7].send_keys("css")
# (4) 通过任意类型定位:"[类型='精确值']"
a1.find_element(By.CSS_SELECTOR, "[autocomplete='off']").send_keys("css")
# (5) 通过任意类型定位:"[类型*='模糊值']"
a1.find_element(By.CSS_SELECTOR, "[autocomplete*='of']").send_keys("css")
# (6) 通过任意类型定位:"[类型^='开头值']"
a1.find_element(By.CSS_SELECTOR, "[autocomplete^='o']").send_keys("css")
# (7) 通过任意类型定位:"[类型$='结尾值']"
a1.find_element(By.CSS_SELECTOR, "[autocomplete$='f']").send_keys("css")
# (8) 直接复制:Copy -> Copy selector
a1.find_element(By.CSS_SELECTOR, "#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title").click()

(1) #id = # + id -> 通过ID定位

(2) .class = . + class -> 通过CLASS定位

(3) 不加修饰符 = 标签头 -> 通过TAG_NAME定位

(4) 通过任意类型定位:"[类型='精确值']"

(5) 通过任意类型定位:"[类型*='模糊值']"

(6) 通过任意类型定位:"[类型^='开头值']"

(7) 通过任意类型定位:"[类型$='结尾值']"

(8) 直接复制:Copy -> Copy selector

8.XPATH

python 复制代码
# 示例
a1.get("https://baidu.com/")
# Copy -> Copy XPath
a1.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]').click()
# Copy -> Copy full XPath
a1.find_element(By.XPATH, '/html/body/div[1]/div[1]/div[3]/a[1]').click()

(1) 直接复制:Copy -> Copy XPath

(2) 直接复制:Copy -> Copy full XPath

相关推荐
来根烟了寂寞17 分钟前
瑞芯微rv1106交叉编译openssl 1.x
linux·嵌入式
数据智能老司机26 分钟前
Python 实战遗传算法——遗传算法导论
python·算法·机器学习
让心淡泊1441 小时前
DAY 58 经典时序预测模型2
python
love530love1 小时前
怎么更新 cargo.exe ?(Rust 工具链)
人工智能·windows·python·rust·r语言
code bean1 小时前
【C#】获取不重复的编码(递增,非GUID)
开发语言·c#
闲人编程1 小时前
PyQt6 进阶篇:构建现代化、功能强大的桌面应用
数据库·python·oracle·gui·脚本·pyqt6·软件
一川月白7091 小时前
Linux--->网络编程(TCP并发服务器构建:[ 多进程、多线程、select ])
linux·运维·服务器·网络编程·io并发服务器
阿里嘎多哈基米1 小时前
二、JVM 入门——(三)栈
java·开发语言·jvm·线程·
EnigmaCoder1 小时前
【Linux】用户与用户组管理
linux·运维·服务器·数据库
不枯石2 小时前
Python计算点云的欧式、马氏、最近邻、平均、倒角距离(Chamfer Distance)
python·计算机视觉