1.初始化和定位
from selenium import webdriver
import time
# 初始化浏览器
driver = webdriver.Chrome()
# 打开一个网页
driver.get("https://baidu.com")
time.sleep(1)
# 定位
# name
ele01 = driver.find_element_by_name("wd")
ele01.send_keys("test")
# id
ele02 = driver.find_element_by_id("su")
ele02.click()
time.sleep(1)
# xpath
driver.find_element_by_xpath('//*[@id="kw"]').send_keys("test")
time.sleep(1)
# css
driver.find_element_by_css_selector("a>img[alt='到百度首页']").click()
time.sleep(1)
# link text
driver.find_element_by_link_text("关于百度").click()
time.sleep(1)
# partial link text
driver.find_element_by_partial_link_text("out Bai").click()
time.sleep(1)
# class name
driver.find_element_by_class_name("s_ipt").send_keys("test")
time.sleep(1)
# tag name
driver.get("http://192.168.31.99/test.html")
driver.find_element_by_tag_name("textarea").send_keys("test666")
### 复数形式
# driver.find_elements_by_tag_name("a")
xpath定位方法见:ui自动化之xpath定位-优快云博客
2.窗口、页面
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://baidu.com")
# 最大化窗口
driver.maximize_window()
time.sleep(1)
# 网页全屏
# driver.fullscreen_window()
# time.sleep(1)
# 最小化浏览器
# driver.minimize_window()
# time.sleep(1)
driver.find_element_by_name("wd").send_keys("test666")
driver.find_element_by_id("su").click()
time.sleep(1)
# 返回上一级
driver.back()
time.sleep(1)
# 前进
driver.forward()
time.sleep(1)
# 刷新
driver.refresh()
time.sleep(1)
driver.back()
time.sleep(0.5)
# 获取窗口标题
print(driver.title)
# 切换窗口
driver.find_element_by_link_text("关于百度").click()
time.sleep(1)
driver.switch_to.window(driver.window_handles[1])
print(driver.current_window_handle) // 获取当前窗口的句柄
print(driver.title)
# 关闭当前窗口
driver.close()
time.sleep(1)
# 退出浏览器
driver.quit()
3.frame相关操作
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://qzone.qq.com/")
driver.maximize_window()
time.sleep(1)
#进入第一层的iframe
driver.switch_to.frame("login_frame")
# driver.switch_to.frame(0)
# driver.switch_to.frame(driver.find_element_by_xpath("//div[@id='login_div']/iframe"))
driver.find_element_by_link_text("帐号密码登录").click()
time.sleep(1)
# 切到父级frame
driver.switch_to.parent_frame()
# 切到主frame
# driver.switch_to.default_content()
driver.find_element_by_xpath("//span[text()='Android']").click()
4.元素的相关操作方法
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)
# 点击
driver.find_element_by_xpath("//input[@value='测试单击']").click()
time.sleep(1)
# 输入
driver.find_element_by_css_selector("textarea").send_keys("test666")
time.sleep(1)
# 清空输入框
driver.find_element_by_css_selector("textarea").clear()
time.sleep(1)
# 获取文本内容
# driver.find_element_by_xpath().text
# 判断元素是否可操作
print(driver.find_element_by_xpath("//input[@value='永远点不了的按钮']").is_enabled()) # False
# 判断元素是否被选中,比如单选和复选框
print(driver.find_element_by_xpath("//input[@onclick=\"onclick1('吃花生')\"]").is_selected()) # True
print(driver.find_element_by_xpath("//input[@onclick=\"onclick1('吃瓜子')\"]").is_selected()) # False
# 判断元素是否可见
print(driver.find_element_by_name("fruit").is_displayed()) # True
print(driver.find_element_by_name("fruit-none").is_displayed()) # False
# 在一个元素内找其它元素
driver.find_element_by_xpath("//form/div/div[1]")\
.find_element_by_xpath("//textarea").send_keys("test test")
# 文件上传
driver.find_element_by_id("file").send_keys("C:/Users/zero/Desktop/test.jpg")
# 获取元素宽高
print(driver.find_element_by_name("t2").size)
# 获取元素的坐标
print(driver.find_element_by_name("t2").location)
# 获取元素的宽高和坐标
print(driver.find_element_by_name("t2").rect)
# 获取元素的指定属性
print(driver.find_element_by_xpath("//img/..").get_attribute("href"))
print(driver.find_element_by_xpath("//img/..").get_property("href"))
5.下拉列表
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)
#实例化一个对象
fruit_select = Select(driver.find_element_by_name("fruit"))
# 根据索引选
fruit_select.select_by_index(3)
time.sleep(1)
# 根据value选
fruit_select.select_by_value("a")
time.sleep(1)
# 根据文本选
fruit_select.select_by_visible_text("香蕉")
6.截图
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://baidu.com")
driver.maximize_window()
time.sleep(1)
# 网页截图
driver.save_screenshot("../screenshots/bd.png")
# 元素截图
driver.find_element_by_id("s_lg_img").screenshot("../screenshots/bd_logo.png")
# 获取元素截图的字节形式
bd_logo_bytes = driver.find_element_by_id("s_lg_img").screenshot_as_png
with open("../screenshots/bd_logo_b.png", "wb") as fwb:
fwb.write(bd_logo_bytes)
7.三种弹框
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)
# 处理alert弹框
driver.find_element_by_xpath("//input[@value='点我测试alert弹框']").click()
time.sleep(1)
driver.switch_to.alert.accept()
# 处理confirm弹框
driver.find_element_by_xpath("//input[@value='点我测试confirm弹框']").click()
time.sleep(1)
# driver.switch_to.alert.accept()
driver.switch_to.alert.dismiss()
# 处理prompt弹框
driver.find_element_by_xpath("//input[@value='点我测试prompt弹框']").click()
time.sleep(1)
driver.switch_to.alert.send_keys("test666")
driver.switch_to.alert.accept()
# driver.switch_to.alert.dismiss()
8.键盘操作
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)
driver.find_element_by_name("t2").send_keys("test666")
time.sleep(1)
driver.find_element_by_name("t2").send_keys(Keys.CONTROL + "a", "x")
time.sleep(1)
# driver.find_element_by_name("t2").send_keys(Keys.CONTROL + "x")
# time.sleep(1)
driver.find_element_by_name("t2").send_keys(Keys.CONTROL + "v")
driver.find_element_by_name("t2").send_keys(Keys.CONTROL + "v")
9.鼠标操作
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains as AC
import time
driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)
# 双击、右键点击
AC(driver) \
.double_click(driver.find_element_by_xpath("//input[@value='测试双击']")) \
.context_click(driver.find_element_by_xpath("//input[@value='测试右击']")) \
.perform()
time.sleep(1)
# 鼠标悬浮
driver.get("https://baidu.com")
time.sleep(1)
AC(driver).move_to_element(driver.find_element_by_name("tj_briicon")) \
.perform()
time.sleep(1)
# 长按
# AC(driver).click_and_hold(driver.find_element_by_xpath("//a[text()='学术']")).perform()
# time.sleep(3)
# AC(driver).release(driver.find_element_by_xpath("//a[text()='学术']")).perform()
# time.sleep(1)
# 拖动元素到另一个元素
driver.get("http://localhost/t.html")
time.sleep(1)
AC(driver) \
.drag_and_drop(driver.find_element_by_id("box"), driver.find_element_by_id("box1"))\
.perform()
time.sleep(2)
driver.refresh()
time.sleep(1)
# 把元素根据指定坐标拖动
AC(driver) \
.drag_and_drop_by_offset(driver.find_element_by_id("box"), 100, 100)\
.perform()
10.三种等待(强制等待time 隐式等待implicitly 显示等待WebDriverWait)
from selenium import webdriver
import time
driver = webdriver.Chrome()
# 设置十秒的隐式等待
driver.implicitly_wait(10)
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)
driver.find_element_by_xpath("//input[@value='测试等待']").click()
driver.find_element_by_id("test_input_01").send_keys("test666")
#显示等待
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait as WDW
import time
driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)
driver.find_element_by_xpath("//input[@value='测试等待']").click()
# def find_input(driver):
# return driver.find_element_by_id("test_input_01")
WDW(driver, 10, 0.5) \
.until(lambda x: x.find_element_by_id("test_input_01")) \
.send_keys("test666") # (对象, 最长等待时长, 间隔多久扫描一次)
# driver.find_element_by_id("test_input_01").send_keys("test666")
11.窗口滚动、操作js页面
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://jd.com")
driver.maximize_window()
time.sleep(1)
# 执行js
driver.execute_script("scrollTo(0, 2420)")
time.sleep(3)
# 处理date日期元素
driver.get("http://localhost/test.html")
time.sleep(1)
driver.execute_script("document.querySelector(\"[name='date']\").value = \"2028-01-01\";")
12.无界模式
from selenium import webdriver
# 浏览器配置可以修改浏览器大部分的设置,比如:设置默认下载路径、设置下载询问弹框
# 初始化浏览器配置
options = webdriver.ChromeOptions()
# 加入无头配置
options.add_argument("--headless")
# 初始化浏览器并加入配置
driver = webdriver.Chrome(options=options)
driver.get("http://192.168.31.99")
13.非常规文件上传
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains as AC
import time
from pykeyboard import PyKeyboard
import pyperclip
driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)
AC(driver).click(driver.find_element_by_id("file")).perform()
time.sleep(3)
# 操作键盘
kb = PyKeyboard()
pyperclip.copy(r"C:\Users\sss\Desktop\docs\test - 副本.jpg")
# # 单击shift切换到英文输入法
# kb.tap_key(kb.shift_key)
# # 输入文件路径
# kb.type_string(r"C:\Users\sss\Desktop\docs\test - 副本.jpg")
# 按下Ctrl + v
kb.press_keys([kb.control_key, "v"])
# 单击回车
kb.tap_key(kb.enter_key)