frame
在web应用中经常会出现frame的嵌套应用,假设页面上有A,B两个frame,B在A内,具体思路
-
使用switch_to.frame()方法,把当前定位的主体切换到B frame里
-
使用switch_to.default_content()从B frame切换回A frame
driver.switch_to.frame() # 切换到frame内操作 括号内写定位器 定位frame语句 find_element driver.switch_to.default_content() # 切换回默认主体内操作
使用frame登录QQ邮箱
from selenium import webdriver driver = webdriver.Chrome(r'D:\Program Files (x86)\Chromedriver\chromedriver_win32\chromedriver.exe') driver.get('https://mail.qq.com/') driver.maximize_window() # 最大化窗口 driver.switch_to.frame(driver.find_element('id', 'login_frame')) # 切换到frame driver.find_element('id', 'u').send_keys('') # 定位并输入账号 driver.find_element('id', 'p').send_keys('') # 定位并输入密码 driver.find_element('id', 'login_button').click() # 定位登录按钮并点击
文件上传
driver.find_element('type', 'file').send_keys('文件绝对路径')
上传文件可以直接定位到上传文件的input元素,使用send_keys发送本地文件的绝对路径。
这个方法只有在上传文件功能使用html自带的input type='file'时才有效。有的网站上传文件的功能是使用另外封装的方法,这时send_keys就无效了
多窗口切换
有时自动化操作会在多个窗口来回操作,webdriver提供了很好的解决方案,使用driver.switch_to().window(handle)来切换窗口
from selenium import webdriver import time driver = webdriver.Chrome(r'D:\Program Files (x86)\Chromedriver\chromedriver_win32\chromedriver.exe') driver.get('https://www.baidu.com/') driver.maximize_window() current_handle = driver.current_window_handle # 记录主页面的handle driver.find_element('class name', 'title-content').click() # 点击链接 driver.switch_to.window(driver.window_handles[1]) # 切换到新的窗口 time.sleep(2) driver.switch_to.window(current_handle) # 切换回主窗口 driver.find_element('id', 'kw').send_keys('python')
悬浮菜单
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains # 操作链 driver = webdriver.Chrome(r'D:\Program Files (x86)\Chromedriver\chromedriver_win32\chromedriver.exe') driver.get('https://www.baidu.com/') ActionChains(driver).move_to_element(driver.find_element('id', 's-usersetting-top')).perform() # 将鼠标移动到指定元素上 driver.find_element('link text', '高级搜索').click()
验证码的处理
-
目前最快解决的聊个手段:
-
去掉验证码:比较适合于新开发但未上线的系统
-
设置万能码:比较适合于已经上线使用的系统。
-
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。