#强制
time.sleep(3)
#隐性等待(全局等待-设置一次-在driver会话周期(打开-关闭))在指定时间内完成,超过时间会有异常
dr.implicitly_wait(30)
#显性等待
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
presence_of_element_located:元素存在
visibility_of_element_located:元素可见
element_to_be_clickable:元素可点击
WebDriverWait(dr,10).until(EC.visibility_of_element_located((By.ID,'TANGRAM__PSP_10__footerULoginBtn')))
#1切换到iframes方式一
先查看是否在iframes内--复制xpath相对路径到搜索框--显示两个html
//iframes先确定是哪个iframes(通过下标或name属性唯一或xpath属性)
三种定位切换
1:name
dr.switch_to.frame('login_frame_qq')
2:index(从一开始)
dr.switch_to.frame(3)
3:xpath
dr.switch_to.frame(dr.find_element_by_xpath("//iframe[@name='login_frame_qq']"))
#2切换到iframes方式二
切换后等待时间都做了
WebDriverWait(dr,10).until(EC.frame_to_be_available_and_switch_to_it('login_frame_qq'))
#从iframe退回
1:回到默认的页面(顶层的html)
dr.switch_to.default_content()
2:回到上一级iframe
dr.switch_to.parent_frame()
#2切换窗口
#获取全部的窗口句柄
print(dr.window_handles)
#当前浏览器句柄:
print(dr.current_window_handle)
#切换到指定句柄在操作页面--最新窗口--需要等待
dr.switch_to.window(dr.window_handles[-1])
#新页面等待控件存在
WebDriverWait(dr,10).until(EC.visibility_of_element_located((By.ID,'j_head_focus_btn')))
dr.find_element_by_id('j_head_focus_btn').click()
#3弹窗
#访问有直接本地弹出弹框的网址
dr.get('D:\\study\\WEB_AUTO\\test\\alert.html')
dr.find_element_by_xpath("//input[@type='button']").click()
#等待弹框的出现
WebDriverWait(dr,10).until(EC.alert_is_present())
#切换到alert
alert=dr.switch_to.alert
print(alert.text)
alert.accept()
# 取消
# alert.dismiss()
#4鼠标操作(悬浮用的最多)
from selenium.webdriver import ActionChains
#1实例化ActionChains类获得鼠标对象
ac=ActionChains(dr)
#2将鼠标操作添加到actions列表中--el是元素对象
el=dr.find_element(By.XPATH,'//span[@data-key="深圳"]')
ac.move_to_element(el)
3调用porform()来执行鼠标操作
ac.perform()
综合
ActionChains(dr).move_to_element(el).perform()
#5下拉框(index定位忽略)
from selenium.webdriver.support.select import Select
WebDriverWait(dr,10).until(EC.visibility_of_element_located((By.XPATH,"//select[@name='ft']")))
select_ele=dr.find_element_by_xpath("//select[@name='ft']")
#获得下拉框Select实例对象
s=Select(select_ele)
#下标
#s.select_by_index(5)
# #value值
#s.select_by_value('ppt')
# #文本内容
s.select_by_visible_text('Adobe Acrobat PDF (.pdf)')
#6键盘操作
from selenium.webdriver.common.keys import Keys
dr.find_element_by_id("kw").send_keys("seleniumm")
time.sleep(5)
#删除一个
dr.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
time.sleep(5)
#全选
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(5)
#复制
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'c')
time.sleep(5)
#粘贴
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
#按回车
dr.find_element_by_xpath("//input[@id='su']").send_keys(Keys.ENTER)
#7.获取控件属性值
dr.find_element_by_xpath("//input[@id='su']").text
dr.find_element_by_xpath("//input[@id='su']").get_attribute('name')
#8.滚动条处理
#1:找到滚动条的控件
WebDriverWait(dr,10).until(EC.visibility_of_element_located((By.XPATH,"//div[@class='result-op c-container xpath-log']/h3/a")))
ele=dr.find_element_by_xpath("//div[@class='result-op c-container xpath-log']/h3/a")
#控件元素对象的顶端和窗口顶端对齐
dr.execute_script("arguments[0].scrollIntoView();",ele)
# 控件元素对象的底端和窗口底端对齐---一般
dr.execute_script("arguments[0].scrollIntoView(false);",ele)
#移动到页面底端
dr.execute_script("window.scrollTo(0,document.body.scrollHeight)")
#移动到页面顶端
dr.execute_script("window.scrollTo(document.body.scrollHeight,0)")
#9 js操作日历
dr.get('https://www.12306.cn/index/')
#js语句---Console先确定可以用
js="var ele=document.getElementById('train_date');ele.readOnly=false;ele.value='2019-12-13';"
time.sleep(6)
dr.execute_script(js)
#10 上传操作(下载pywin32,pypiwin32和spy++)
python3 -m pip install pywin32
设置中导入pypiwin32
1.input标签直接send_keys("路径")
dr.find_element_by_xpath("//input[@type='file']").send_keys('D:\\jdk8\\README.html')
2.windows控件
#不同的浏览器的标题不一样
dialog=win32gui.FindWindow('#32770','打开')
#子窗口
#二级窗口
comboxex=win32gui.FindWindowEx(dialog,0,'ComboBoxEx32',None)
#三级窗口
combox=win32gui.FindWindowEx(comboxex,0,'ComboBox',None)
#四级窗口-Edit
edit=win32gui.FindWindowEx(combox,0,'Edit',None)
#打开按钮
button=win32gui.FindWindowEx(dialog,0,'Button','打开(&O)')
#上传操作(文件路径)
win32gui.SendMessage(edit,win32con.WM_SETTEXT,None,'D:\\jdk8\\README.html')
#点击打开按钮上传
win32gui.SendMessage(dialog,win32con.WM_COMMAND,1,button)