元素操作、浏览器操作、页面交互操作、鼠标操作、其他重要API、截图应用
一、元素操作
1、操作方法:
模拟点击:element.click()
模拟输入:element.send_keys(value)
模拟清除:element.clear()
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin") driver.find_element(By.CSS_SELECTOR,"[name='passwordA']").send_keys("123456") driver.find_element(By.CSS_SELECTOR,".telA").send_keys("18600000111") driver.find_element(By.CSS_SELECTOR,"[placeholder*='邮箱']").send_keys("123@qq.com") #修改电话 driver.find_element(By.CSS_SELECTOR,".telA").clear() #在输入 driver.find_element(By.CSS_SELECTOR,".telA").send_keys("18611111111") #点击 driver.find_element(By.CSS_SELECTOR,"button").click() #3 秒后关闭浏览器 sleep(3) driver.quit()
2、获取元素信息方法
获取元素大小:element.size
获取元素文本:element.text
获取元素属性值:element.get_attribute('属性名')
判断元素是否可见:element.is_displayed()
判断元素是否可用:element.is_enable()
判断元素是否被选中:element.is_selected()
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #获取user框大小 user_size = driver.find_element(By.CSS_SELECTOR,"#userA").size print(user_size) #查找A标签文本 a = driver.find_element(By.TAG_NAME,"a").text print(a) #获取超链接地址 addr = driver.find_element(By.TAG_NAME,"a").get_attribute("href") #判断span标签是否可见 span1 = driver.find_element(By.TAG_NAME,"span").is_displayed() print(span1) #判断取消按钮是否可用 button1 = driver.find_element(By.CSS_SELECTOR,"#cancelA").is_enabled() print(button1) #旅游按钮是否选择 button2 = driver.find_element(By.CSS_SELECTOR,"#lyA").is_selected() print(button2) #3 秒后关闭浏览器 sleep(3) driver.quit()
二、浏览器操作
1、设置浏览器显示范围
窗口最大化:driver.maxmize_window()
设置窗口大小:driver.set_window_size(width,height)
设置窗口位置:driver.set_window_position(x,y)
2、浏览器显示页面操作
页面后退操作:driver.back()
页面前进操作:driver.forward()
设置窗口位置:driver.refresh()
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #最大化浏览器 driver.maximize_window() sleep(3) #设置窗口大小 driver.set_window_size(500,700) #设置位置 driver.set_window_position(0,500) #0 代表左上角开始 #点击新浪 driver.find_element_by_partial_link_text("新浪").click() #返回 driver.back() #前进 driver.forward() #刷新 driver.refresh() #3 秒后关闭浏览器 sleep(3) driver.quit()
3、浏览器关闭操作
关闭当前窗口:driver.close()
关闭浏览器:driver.quit()
4、获取浏览器信息(记住:如果打开了一个新窗口,元素定位焦点还是在第一个窗口,新打开的窗口目前还定位不到,需要窗口切换)
获取标题:driver.title
获取网页地址:driver.current_url
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #最大化浏览器 driver.maximize_window() sleep(3) #获取当前窗口标题 print(driver.title) #获取当前窗口url print(driver.current_url) #点击新浪 driver.find_element_by_partial_link_text("新浪").click() #获取当前窗口标题 print(driver.title) #获取当前窗口url print(driver.current_url) #关闭当前窗口 driver.close() #3 秒后关闭浏览器 sleep(3) driver.quit()
三、页面交互操作
1、下拉框
Select 下拉框:selenium --- select 类

from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.select import Select #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #使用select类实现 #1、定位select父类 el = driver.find_element(By.CSS_SELECTOR,"#selectA") #2、实例化select类对象 select = Select(el) #3、使用下标定位广州 select.select_by_index(2) #4、使用value定位上海 select.select_by_value("sh") #5、使用文本定位北京 select.select_by_visible_text("A北京") #3 秒后关闭浏览器 sleep(3) driver.quit()
2、弹出框处理
当界面出现弹出框时,必须先处理弹出框才会继续其他操作
类型:
自定义弹出框:
可以通过web浏览器开发者工具查看到具体的元素信息
通过元素定位直接处理掉
JS弹出框
通过JS函数实现,通过web浏览器开发者工具查看到元素信息
常见JS弹出框类型:alert(警告框)、confirm(确认框)、prompt(提示框)
不能通过元素定位处理
弹出框的处理:

from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.select import Select #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #点击弹窗 driver.find_element(By.ID,"alerta").click() #获取弹窗对象 el = driver.switch_to.alert #打印弹窗文本 print(el.text) #处理弹窗(同意/取消) #el.dismiss() #取消 el.accept() #同意 #3 秒后关闭浏览器 sleep(3) driver.quit()
3、滚动条操作
用 JS 语句控制滚动条
扩展:1、滚动到页面底部:js = "window scrollTo(0, document.body.scrollHeight)" #动态获取当前窗口滚动多少高度,自动滚动到底部

from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.select import Select #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #设置窗口大小 driver.set_window_size(100,100) #操作滚动条(JS向下滚动) js_down = "window.scrollTo(0,10000)" # 0 代表左右,10000代表距离顶部多远 driver.execute_script(js_down) #执行js语句 #JS向上 js_top = "window.scrollTo(0,0)" driver.execute_script(js_top) #处理弹窗(同意/取消) #el.dismiss() #取消 el.accept() #同意 #3 秒后关闭浏览器 sleep(3) driver.quit()
四、鼠标操作
1、常见鼠标操作
ActionChains 鼠标类:点击、右击、悬停、拖拽
点击、右击、悬停

from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver import ActionChains #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #获取类对象 action = ActionChains(driver) #查找注册按钮 el = driver.find_element(By.CSS_SELECTOR,"#button") #调用悬停,必须调用perform() action.move_to_element(el).perform() #点击鼠标右键 action.context_click(el).perform() #双击右键 action.double_click(el).perform() #3 秒后关闭浏览器 sleep(3) driver.quit()
拖拽:
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver import ActionChains #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #获取类对象 action = ActionChains(driver) #查找框 div1 = driver.find_element(By.CSS_SELECTOR,"#div1") div2 = driver.find_element(By.CSS_SELECTOR,"#div2") #拖拽鼠标 action.drag_and_drop(div1,div2).perform() #3 秒后关闭浏览器 sleep(3) driver.quit()
2、等待(隐式等待)(针对全局)
元素等待:在定位页面元素如未定位到,会在指定时间内一直等待的过程

from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver import ActionChains #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #隐式等待,全局失效,找不到元素,等待10秒钟 driver.implicitly_wait(10) #找不到该元素,10秒后报错 div1 = driver.find_element(By.CSS_SELECTOR,"#userAA") #3 秒后关闭浏览器 sleep(3) driver.quit()
3、等待(显示等待)(针对单个元素)

from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #显示等待(10秒时间寻找,每隔0,5秒寻找一次,X就是driver el = WebDriverWait(driver,10,0.5).until(lambda x : x.find_element(By.CSS_SELECTOR,"#userA")) el.send_keys("admin") #3 秒后关闭浏览器 sleep(3) driver.quit()
4、强制等待(就是时间模块:sleep)
五、其他重要API
1、切换 fram 框架
HTML 页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素

from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #获取iframe 元素 A = driver.find_element(By.CSS_SELECTOR,"#idframe1") #切换到 iframe 里面的元素 driver.switch_to.frame(A) #再从上一个frame框架出来 driver.switch_to.default_content() #获取另一个iframe 元素 B = driver.find_element(By.CSS_SELECTOR,"#idframe2") #切换到 iframe 里面的元素 driver.switch_to.frame(B) #3 秒后关闭浏览器 sleep(3) driver.quit()
2、切换多窗口
当 HTML 页面中,当点击超链接或者按钮时,有的会在新窗口打开页面
selenium 只能定位当前窗口的元素,要定位新的窗口元素,就必须进行窗口切换
切换方法:(句柄)

from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #点击生成新窗口 driver.find_element(By.CSS_SELECTOR,"userA").click() #获取所有生成的窗口 handles = driver.window_handles #切换窗口,0 为第一个窗口 driver.switch_to.window(handles[1]) #3 秒后关闭浏览器 sleep(3) driver.quit()
切换窗口工具封装
from selenium import webdriver from selenium.webdriver.common.by import By #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #切换窗口工具封装 def switch_window(title): #1、获取所有窗口句柄 handles = driver.window_handles #2、遍历句柄进行切换 for handle in handles: #操作 driver.switch_to.window(handle) #获取当前窗口title,是否为获取的 if driver.title == title: #操作元素代码 return "已经找到{}窗口".format(title) title_A = "注册A" title_B = "注册B" #打开A、B网页 driver.find_element(By.CSS_SELECTOR,"userA").click() driver.find_element(By.CSS_SELECTOR,"userB").click() #切换到A、B网页 switch_window(title_A) driver.find_element(By.CSS_SELECTOR,"userA").send_keys("admin") switch_window(title_B) driver.find_element(By.CSS_SELECTOR,"userB").send_keys("admin") #3 秒后关闭浏览器 sleep(3) driver.quit()
六、如果未定位到元素怎么办
1、考虑方面:

七、截图应用
1、解决方法:

from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By import time #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") # driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin") driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys("123456") #截图 driver.get_screenshot_as_file("error_{}.png".format(time.strftime("%Y_%m_%d_%H_%M_%S"))) #时间 #3 秒后关闭浏览器 sleep(3) driver.quit()
八、验证码处理
1、认识验证码

cookie跳过登录

from selenium import webdriver from time import sleep #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("https://www.baidu.com") #添加cookie data = {"name":"value"} driver.add_cookie(data) #刷新 driver.refresh() #3 秒后关闭浏览器 sleep(3) driver.quit()

浙公网安备 33010602011771号