1.定位元素
1)id、name、class、tag_name
id | driver.find_element(By.ID,'kw') |
name | driver.find_element(By.NME,'wd') |
class | driver.find_element(By.CLASS,'s_ipt') |
tag_name | driver.find_element(By.TAG_NAME,'input') # <div> <input>等 |
2)link_text、partial_link_text
link定位 | driver.find_element(By.LINK_TEXT,'图片') |
partial link | driver.find_element(By.PARTIAL_LINK_TEXT,'图') |
3)XPATH
绝对路径 | driver.find_element(By.XPATH,'/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input') |
元素属性路径 | driver.find_element(By.XPATH,'//*[@id="kw"]') |
4)CSS定位
2.控制浏览器
1)控制大小
最大化 | driver.maximize_window() |
最小化 | driver.minimize_window() |
设置尺寸 | drivet.set_window_size(480,800) |
2)控制前进和后退
前进 | driver.back() |
后退 | driver.forward() |
3)模拟刷新
刷新 | driver.refresh() |
3.元素操作
4.鼠标事件
from selenium.webdriver.common.action_chains import ActionChains as AChains | |
执行所有ActionChains中存储的行为 | perform() |
右击 | AChains(driver).context_click(element_aaa).perform() |
鼠标悬停 | AChain(driver).move_to_element(element_aaa).perform() |
鼠标拖放 | AChain(driver).drag_and_drop(elem_aaa,elem_bbb).perform() |
5.键盘事件
from selenium.webdrive.common.keys import Keys
格式:
elem_aa.send_keys()
常用:
键入 | elem.send_keys("QQ音乐") |
回车 | elem.send_keys(Keys.Enter) |
删除 | elem.send_keys(Keys.BACK_SPACE) |
制表 | elem.send_keys(Keys.TAB) |
空格 | elem.send_keys(Keys.SPACE) |
回退 | elem.send_keys(Keys.ESCAPE) |
全选 | elem.send_keys(Keys.CONTROL,‘a’) |
复制 | elem.send_keys(Keys.CONTROL,‘c’) |
F1 | elem.send_keys(Keys.F1) |
6.获取验证信息
print一些东西
print(driver.title) | |
print(driver.current_url) | |
7.设置元素等待
1.显式等待
导入相应的库
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
设置等待异常抛出
WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw2")))
for循环等待
print(driver.title)
print(driver.current_url)
print(ctime())
for i in range(10):
try:
kw22=driver.find_element(By.ID,"kw22")
if kw22.is_displayed():
break
except:pass
sleep(1)
else:
print("timeout")
driver.close()
print(ctime())
2.隐式等待
3.sleep休眠方法
8.定位一组元素
kws=driver.find_elements(By.TAG_NAME,"input")
9.多表单切换
界面有iframe的情况
# 定位到iframe
iframe=driver.find_element(By.ID,"id")
iframe1=driver.find_element(By.XPATH,"XPATH1")
iframe2=driver.find_element(By.XPATH,"XPATH2")
# 切换到iframe
driver.switch_to.frame(iframe)
# 如果有嵌套
driver.switch_to.frame(iframe1)
driver.switch_to.frame(iframe2)
#返回父iframe
driver.switch_to.patent_frame()
# 退出iframe
driver.switch_to.default_content()
10.多窗口切换
1.先获取handles
handles=driver.window_handles
2.根据handles切换窗口
# 1和-1可以理解为从左向右和从右向左
driver.switch_to.window(handles[0])
driver.switch_to.window(handles[1])
driver.switch_to.window(handles[2])
driver.switch_to.window(handles[3])
driver.switch_to.window(handles[0])
driver.switch_to.window(handles[-1])
driver.switch_to.window(handles[-2])
driver.switch_to.window(handles[-3])
xinwen=driver.find_element(By.XPATH,'//*[@id="s-top-left"]/a[1]')
hao123=driver.find_element(By.XPATH,'//*[@id="s-top-left"]/a[2]')
ditu=driver.find_element(By.XPATH,'//*[@id="s-top-left"]/a[3]')
tieba=driver.find_element(By.XPATH,'//*[@id="s-top-left"]/a[4]')
shipin=driver.find_element(By.XPATH,'//*[@id="s-top-left"]/a[5]')
tupian=driver.find_element(By.XPATH,'//*[@id="s-top-left"]/a[6]')
lj=[xinwen,hao123,ditu,tieba,shipin,tupian] #创造链接数组
for i in lj:
i.click()
sleep(1)
print(driver.current_url)
handles=driver.window_handles
for xh in range(20):
for a in handles:
driver.switch_to.window(a)
print(driver.title)
print(driver.current_url)
print(ctime())
sleep(1)
11.警告框处理
alert | alert弹出一个提示框,点击确定即可关闭 | |
confirm | confirm弹出确认框,点击确定或者取消 | |
prompt | prompt弹出输入框,输入后,点击确定或者取消 | |
driver.get('http://cdn1.python3.vip/files/selenium/test4.html')
driver.maximize_window()
sleep(4)
# alert警告框处理
driver.find_element(By.ID, 'b1').click() # alert弹出一个提示框,点击确定即可关闭
sleep(2)
driver.switch_to.alert.accept()
sleep(2)
# confirm弹窗处理
driver.find_element(By.ID, 'b2').click() # confirm弹出确认框,点击确定或者取消
sleep(2)
driver.switch_to.alert.accept() # 确认
sleep(2)
driver.find_element(By.ID, 'b2').click() # confirm弹出确认框,点击确定或者取消
sleep(2)
driver.switch_to.alert.dismiss() # 取消
sleep(2)
# prompt弹窗处理
driver.find_element(By.ID, 'b3').click() # prompt弹出输入框,输入后,点击确定或者取消
sleep(2)
driver.switch_to.alert.send_keys('这是一个验证测试,点击确定')
sleep(3)
driver.switch_to.alert.accept() # 确认
sleep(3)
driver.find_element(By.ID, 'b3').click() # prompt弹出输入框,输入后,点击确定或者取消
sleep(2)
driver.switch_to.alert.send_keys('这是一个验证测试,点击取消')
sleep(3)
driver.switch_to.alert.dismiss() # 取消
sleep(3)
12.上传文件
1.input
def z_upload_input():
driver.get('http://www.sahitest.com/demo/php/fileUpload.htm')
driver.find_element(By.ID,'file').send_keys('C:\zxs\pip-22.0.4.tar.gz')
print(driver.find_element(By.ID,'file').get_attribute('value'))
2.非input
13.下载文件
14.操作cookie
1.打印全部cookie | |
2.添加cookie | |
3.打印特定一条cookie | |
def z_cookies():
print(driver.get_cookies()) # 打印全部cookie
driver.add_cookie({'name':'aaa','value':'zzz'},{'name':'bbb','value':'xxx'},{'name':'ccc','value':'ccc'}) # 添加cookie
print(driver.get_cookie(name='zxs')) # 打印特定一条cookie,name='zxs'
print(driver.get_cookie(name='zxs')) # 打印特定一条cookie,name='zxs'
15.调用JavaScript
只简单写一个打开窗口的js,如果想要更多的操作还需要去学习一些js的知识
def z_windowsopen():
for i in range(10):
driver.execute_script('window.open()')
16.处理HTML5的视频播放
17.窗口截图
driver.get_screenshot_as_file(r'path')会截取整个窗口,如果窗口不是最大会也不会截取窗口外的桌面的其他画面
截取整个窗口 | |
通过元素截图 | |
def z_screenshot():
sleep(2)
driver.maximize_window()
sleep(1)
driver.get_screenshot_as_file(r'C:\zxs\screenshot\maximize_window.png') # 截取整个窗口内容
driver.set_window_size(800,400)
sleep(6)
driver.get_screenshot_as_file(r'C:\zxs\screenshot\set_window_size.png') # 截取整个窗口内容,窗口外的不截屏
sleep(2)
# 通过元素截图方法
driver.find_element(By.XPATH,'//*[@id="lg"]').screenshot(r'C:\zxs\screenshot\元素截图.png')
driver.quit()
18.关闭窗口
1.只关闭当前窗口 | |
2.关闭浏览器全部窗口 | |
19.验证码的处理
1.去掉验证码
2.设置万能验证码