元素四大操作
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, "新闻")
el1.send_keys()
el1.click()
print("打印该元素的文本内容", el2.text)
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)
el1 = driver.find_element(By.ID, "kw")
el1.send_keys("胡图图")
el2 = driver.find_element(By.XPATH, "//span/input[@id='su']")
el2.click()
el3 = driver.find_element(By.XPATH, "//div[@id='4']/div/h3/a[@data-showurl-highlight='false']")
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)
wins = driver.window_handles
print(wins)
driver.switch_to.window(wins[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
'''
driver.switch_to.frame("id")
driver.switch_to.frame(3)
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)
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")
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)
driver.find_element(By.ID, "kw").send_keys(Keys.CONTROL, 'a')
driver.find_element(By.ID, "kw").send_keys(Keys.CONTROL, 'c')
driver.find_element(By.ID, "kw").send_keys(Keys.CONTROL, 'x')
driver.find_element(By.ID, "kw").clear()
time.sleep(2)
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")
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 释放鼠标
'''