selenium基础:web页面操作(四大操作+三大等待+三大切换+鼠标键盘)

元素四大操作

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()  # 最大化窗口
driver.get("https://www.baidu.com/")


el1 = driver.find_element(By.ID, "kw")
el2 = driver.find_element(By.LINK_TEXT, "新闻")
#  1.输入
el1.send_keys()
#  2.点击
el1.click()
#  3.获取元素文本内容
print("打印该元素的文本内容", el2.text)
#  4.获取元素的属性
print("获取name的属性值", el1.get_attribute("name"))

元素三大等待

"""
元素等待
1.强制等待   time.sleep(秒数)   停留
2.智能等待   driver.implicitly_wait(秒数)   给页面的所有元素设置全局等待时间,
只要在设置的时间范围内找到元素,就会执行下一个代码,最多等待设置的时间
3.显示等待   等待当前需要操作的元素 基于多种条件+等待元素
            多种条件:等待元素可见/等待url跳转为xxx/很多场景条件....
            语法:
             loc=()
             WebDriverWait(driver, 15).until(EC.presence_of_element_located(loc)) 
            		默认等待15s,直到loc元素出现
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
自动化框架脚本:以显示等待为主,以强制等待为辅
"""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")

# 智能等待
driver.implicitly_wait(10)

# 场景
# 1.定位元素,输入搜索内容
el1 = driver.find_element(By.ID, "kw")
el1.send_keys("胡图图")

# 2.点击百度一下
el2 = driver.find_element(By.XPATH, "//span/input[@id='su']")
el2.click()
# 显示等待  (等待元素存在后,在去执行其他操作)
# loc = (By.XPATH,"//div[@id='4']/div/h3/a[@data-showurl-highlight='false']")  
# WebDriverWait(driver, 15).until(EC.presence_of_element_located(loc))     ---等待元素存在
# 3.点击搜索的内容
el3 = driver.find_element(By.XPATH, "//div[@id='4']/div/h3/a[@data-showurl-highlight='false']")
# el3 = driver.find_element(*loc)  # 显示等待  loc相当于是一个元组,传了2个参数(方法,值),所以需要加*
el3.click()

三大切换(新打开的窗口定位元素)

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
# 智能等待
driver.implicitly_wait(10)

# 新打开的窗口定位元素,需要切换窗口
# 获取浏览器的窗口列表,最早打开的窗口放到list的最前面
wins = driver.window_handles   # 获取当前所有的窗口
print(wins)
# 切换到最后打开的窗口
driver.switch_to.window(wins[1])     #[1] 当前只有两个窗口所写1,如果有很多个要选择最后打开的窗口则写[-1]
el4 = driver.find_element(By.XPATH, "//div[@class='search_nav j_search_nav']/a[@param='wd']")
el4.click()
time.sleep(3)
driver.close()


'''
定位的元素包含在ifram/fram标签里面
切换到iframe/frame
'''
# 方式一: id
driver.switch_to.frame("id")
# 方式二: 索引
driver.switch_to.frame(3)
# 方式三: 找到iframe元素
driver.switch_to.frame(driver.find_element(By.XPATH, ""))
# 再定位元素
driver.find_element(By.XPATH, "//input[@id='u']")

弹窗处理

'''
如何实现弹窗的处理
'''
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("http://47.242.107.138:9091/#/login")

# 定位用户名,输入用户名
driver.find_element(By.XPATH, "//input[@placeholder='请输入用户名']").send_keys("admin")
# 定位密码,输入密码
driver.find_element(By.XPATH, "//input[@placeholder='请输入密码']").send_keys("123456")
# 定位验证码,输入验证码
driver.find_element(By.XPATH, "//input[@placeholder='验证码,未绑定谷歌认证器,双击获取二维码']").send_keys("123456")
# 点击确定
driver.find_element(By.XPATH, "//*[@id='app']/div/div/div/div[2]/button/span").click()
# 定位系统设置,点击展开系统设置
driver.find_element(By.XPATH, "//div[@class='n-menu n-menu--vertical menu']/div[7]").click()
# 定位系统设置,点击系统设置
driver.find_element(By.XPATH, "//div[@class='n-menu n-menu--vertical menu']/div[7]/div[2]/div[2]/div/div[2]").click()
# 定位首页,点击首页
driver.find_element(By.XPATH, "//div[@class='n-menu n-menu--vertical menu']/div[1]/div/div[2]").click()
time.sleep(2)


# 弹窗进行处理
alert = driver.switch_to.alert
# 点击确认
alert.accept()
time.sleep(2)
# 点击取消
# alert.dismiss()

driver.close()

滚动条操作

'''
滚动条操作
什么情况下,需要把元素放到可见区域才可以操作?
懒加载/慢加载,必须把元素移动到可见区域,才会实现加载
'''
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com/")
driver.find_element(By.ID, 'kw').send_keys("胡图图")
driver.find_element(By.ID, 'su').click()
loc = (By.XPATH, "//div[@id='8']/div/div/h3/a")
# 显示等待   presence_of_element_located不一定元素可见,只要存在即可
WebDriverWait(driver, 15).until(EC.presence_of_element_located(loc))
driver.find_element(*loc).click()
wins = driver.window_handles   # 获取当前所有的窗口
print(wins)
# 切换到最后打开的窗口
driver.switch_to.window(wins[1])
# 实现滚动条从顶部到底部
driver.execute_script("scrollTo(0,document.body.scrollHeight)")
time.sleep(2)
# 实现滚动条从浏览器底部到顶部
driver.execute_script("scrollTo(document.body.scrollHeight,0)")
time.sleep(2)

键盘操作

'''
键盘操作
'''
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
driver.find_element(By.ID, "kw").send_keys("胡图图")
time.sleep(2)

# ctrl+a
driver.find_element(By.ID, "kw").send_keys(Keys.CONTROL, 'a')
# ctrl+c
driver.find_element(By.ID, "kw").send_keys(Keys.CONTROL, 'c')
# ctrl+x
driver.find_element(By.ID, "kw").send_keys(Keys.CONTROL, 'x')
driver.find_element(By.ID, "kw").clear()
time.sleep(2)
# ctrl+v
driver.find_element(By.ID, "kw").send_keys(Keys.CONTROL, 'v')
time.sleep(2)
driver.close()

鼠标操作

'''
鼠标操作
ActionChains  动作链
可以把多个鼠标操作按照顺序连贯的统一执行
'''
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains


driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com/")

# 第一种写法
el1 = driver.find_element(By.ID, "s-usersetting-top")   # 定位设置这个元素
# ActionChains(driver).move_to_element(el1).perform()     # 操作鼠标移至设置(要等这个操作完成后,才可以定位第二目标元素)
# driver.find_element(By.LINK_TEXT, "高级搜索").click()     # 定位高级搜索这个元素
# time.sleep(2)
# driver.close()

# 第二种写法(分布式)
actions = ActionChains(driver)
actions.move_to_element(el1)
actions.perform()
time.sleep(1)
driver.find_element(By.LINK_TEXT, "高级搜索").click()
time.sleep(1)
driver.close()

'''
ActionChains 常用鼠标操作方法
滑块操作  drag_and_drop_by_offset
click_and_hold 点击鼠标左键不松开
context_click  鼠标右击
double_click   双击
drag_and_drop  从一个元素拖动鼠标到另外一个元素
drag_and_drop_by_offset   拖到某个坐标松开
move_by_offset  鼠标从当前位置移动到某个坐标
move_to_element  鼠标移动到某个元素上面
move_to_element_with_offset   鼠标移动到距离某个元素左上角多少距离的位置
pause  停留
release  释放鼠标
'''
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值