元素操作、浏览器操作、页面交互操作、鼠标操作、其他重要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()

 

posted @ 2023-04-20 17:03  新入世界的小白  阅读(66)  评论(0)    收藏  举报