安装 Selenium 库
pip install selenium
Selenium8种定位方式:
id | find_element_by_id() |
name | find_element_by_name() |
class name | find_element_by_class_name() |
tag name | find_element_by_tag_name() |
link text | find_element_by_link_text |
partial link text | find_element_by_partial_link_text |
xpath | find_element_by_xpath |
css selector | find_element_by_css_selector |
1.访问动态页面
打印淘宝界面所有商品标题:
初始化WebDriver-打开网页-获取页面标题-查找元素-等待-退出浏览器
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
# 加载web驱动工具
test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))
# 以get方式向目标发起请求
test_webdriver.get("https://www.taobao.com/")
# 获取当前浏览器的标头
print(test_webdriver.title)
# 获取页面元素信息
from selenium.webdriver.common.by import By
for item in test_webdriver.find_elements(by=By.XPATH, value="//span[@class='info-wrapper-title-text']"):
print(item.text)
time.sleep(10)
# 浏览器退出
test_webdriver.quit()
2.访问搜索引擎
自动打开百度并搜索关键词信息
初始化WebDriver-打开网页-查找元素-输入关键词-提交搜索-等待结果
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
# 加载web驱动工具
test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))
# 以get方式向目标发起请求
test_webdriver.get("https://www.baidu.com/")
# 获取搜索框元素并输入搜索关键词
element_input_txt = test_webdriver.find_element(By.ID, 'kw')
element_input_txt.send_keys('dilraba')
# 获取搜索按钮元素并点击
element_input_btn = test_webdriver.find_element(By.ID, 'su')
element_input_btn.click()
# 等待搜索结果页面加载
time.sleep(10)
3.鼠标控制
点击 | click() |
右击 | context click() |
双击 | double click() |
拖动 | drag and drop() |
鼠标悬停 | move to element() |
1.悬停
打开界面,将鼠标悬停在某个按键或目录之上
初始化WebDriver-打开网页-最大化窗口-等待页面加载-执行鼠标悬停(使用ActionChains
模拟鼠标悬停在设置按钮上)-等待操作
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
# 加载驱动
test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))
# 访问目标
test_webdriver.get("https://www.baidu.com/")
# 窗口最大化
test_webdriver.maximize_window()
time.sleep(3)
# 使用XPath查找设置按钮并执行鼠标悬停操作
setting = test_webdriver.find_element(By.ID, 's-usersetting-top')
ActionChains(test_webdriver).move_to_element(setting).perform()
# 等待页面加载或进行其他操作
time.sleep(10)
# 记得在最后关闭浏览器
test_webdriver.quit()
2.点击
用代码实现,打开界面,点击指定的按键。
setting = test_webdriver.find_element(By.XPATH, "//a[@href='http://image.baidu.com/' and text()='图片']")
setting.click()
4.网页刷新与切换
初始化WebDriver-设置窗口大小-打开百度首页-打开百度新闻页面-刷新页面-返回百度首页-前进至百度新闻页面-关闭浏览器
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
# 加载驱动
test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))
# 设置窗口大小
test_webdriver.set_window_size(800, 800)
# 访问百度首页
test_webdriver.get("https://www.baidu.com/")
print("第一次打开页面")
time.sleep(5)
# 访问百度新闻页面
test_webdriver.get("https://news.baidu.com/")
print("打开百度新闻页面")
time.sleep(6)
# 刷新页面
test_webdriver.refresh()
time.sleep(7)
# 返回百度首页
test_webdriver.back()
print('返回至百度首页')
time.sleep(6)
# 页面前进至百度新闻页面
test_webdriver.forward()
print('前进至百度新闻页')
time.sleep(5)
# 关闭浏览器
test_webdriver.quit()
5.元素的显示等待
显式等待是指当某个特定条件成立时,WebDriver 才会继续执行下一条命令。
WebDriverWait设置显示等待;
until,EC场景判断,进行元素选择;
参数列表:WebDriver参数1:驱动对象,参数2:超时时长,参数3:轮询参数/检查间隔
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))
test_webdriver.get("https://www.baidu.com/")
element = WebDriverWait(test_webdriver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
element.send_keys('Python')
time.sleep(5)
6.隐式等待
隐式等待是指在WebDriver实例化后,设置一个统一的等待时间。
隐式等待是全局性的,对当前 WebDriver 实例的所有元素查找操作皆有效。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchAttributeException
import time
test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))
#隐式等待五秒
test_webdriver.implicitly_wait(5)
test_webdriver.get("https://www.baidu.com/")
try:
test_webdriver.find_element(By.ID,'kw').send_keys('Python')
time.sleep(2)
except NoSuchAttributeException as e:
print("无此元素")
print(e)
相比之下:隐式等待简单易用,但不够灵活,可能导致不必要的等待时间。
而显示等待更加灵活和强大,可以根据需要等待特定的条件,提高测试的效率和稳定性。