1.多表单切换:
frame 嵌套页面的应用,需要通过 switch_to_frame() 方法将当前定位的主体切换了 frame 里。switch_to_frame() 默认可以直接取表单的 id 或 name 属性进行切换例:#切换到 iframe(id = "if") driver.switch_to_frame("if") 如果完成了在当前表单上的操作可以通过 switch_to_default_content()方法返回到上一层表单。不用指定某个表单的返回,默认对应与它最近的 switch_to_frame()方法。2.多窗口切换:switch_to_window()方法可以切换到任意的窗口。
例:
browser= webdriver.Firefox()
browser.implicitly_wait(10)
browser.get("https://www.baidu.com/")
#获得百度搜索窗口句柄
search = browser.current_window_handle
browser.find_element_by_xpath("//*[@id='u1']/a[7]").click()
browser.find_element_by_css_selector(".pass-fgtpwd").click()#获得当前打开所有窗口句柄
all_handles = browser.window_handles
#进入注册窗口
for handle in all_handles:
if handle!=search:
browser.switch_to_window(handle)
print 'now register window'
browser.find_element_by_id("TANGRAM__PSP_8__userName").send_keys("username")
browser.find_element_by_id("TANGRAM__PSP_8__password").send_keys("password")
browser.find_element_by_id("TANGRAM__PSP_8__submit").click()
#进入搜索窗口
elif handle ==search:
browser.switch_to_window(handle)
print 'now search window'
browser.find_element_by_id("TANGRAM__PSP_2__closeBtn").click()
browser.find_element_by_id("kw").send_keys("test")
browser.find_element_by_id("su").click()
time.sleep(3)
3.警告框处理:
在 WebDriver 中处理 JavaScript 所生成的 alert、confirm 以及 prompt 是很简单的。具体做法是使用 switch_to_alert()方法定位到 alert/confirm/prompt。然后使用 text/accept/dismiss/send_keys 按需进行操做。text 返回 alert/confirm/prompt 中的文字信息。accept 点击确认按钮。
dismiss 点击取消按钮,如果有的话。
send_keys 输入值,这个alert\confirm没有对话框就不能用了,不然会报错。
4.上传文件:1)send_keys上传:对于通过 input 标签实现的通过上传,可以将其看作一个输入框,通过 send_keys()传入本地文件路径从而模拟上传功能。 例:driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')2)AutoIt上传文件:第三方插件,略5.下载文件
为了让 FireFox 让浏览器能实现文件的载,我们需要通过 FirefoxProfile() 对其参数做一个设置。
browser.download.folderList设置成 0 代表下载到浏览器默认下载路径;设置成 2 则可以保存到指定目录。
browser.download.manager.showWhenStarting是否显示开始,Ture 为显示,Flase 为不显示。
browser.download.dir 用于指定你所下载文件的目录。os.getcwd() 该函数不需要传递参数,用于返回当前的目录。
browser.helperApps.neverAsk.saveToDisk指定要下载页面的 Content-type 值,“application/octet-stream”为文件的类型。HTTP Content-type 常用对照表:http://tool.oschina.net/commons
这些参数的设置可以通过在 Firefox 浏览器地址栏输入:about:config 进行设置
#coding=utf-8
from selenium import webdriver
import os
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir", os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")
#下载文件的类型
driver = webdriver.Firefox(firefox_profile=fp)
driver.get("http://pypi.Python.org/pypi/selenium")
driver.find_element_by_partial_link_text("selenium-2").click()
6.操作cookie:get_cookies()获得所有cookie信息
get_cookie(name)返回有特定 name 值有 cookie 信息
add_cookie(cookie_dict) 添加 cookie,必须有 name 和 value 值
delete_cookie(name) 删除特定(部分)的cookie信息删除所有cookie信息
delete_all_cookies() 下面通过 get_cookies()来获取当前浏览器的 cookie 信息
cookie = driver.get_cookies()
driver.add_cookie({'name':'11111','value':'22222'})
print cookie
for cookie in driver.get_cookies():
print "%s ->%s" % (cookie['name'],cookie['value'])
6.调用java script
WebDriver提供了execute_script()方法 来执行 JavaScript 代码
#将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
time.sleep(3)
#将滚动条移动到页面的顶部
js_="var q=document.documentElement.scrollTop=0"
driver.execute_script(js_)
time.sleep(3)
driver.get_screenshot_as_file("D:\\baidu_error.jpg")8.关闭窗口:
close()和qiut()
9.验证码处理:
1)去掉验证码:
2)设置万能码:
例:#coding=utf-8import random
#生成一个 1000 到 9999 之间的随机整数
verify = random.randint(1000,9999)
print u"生成的随机数:%d " %verify
number = input(u"请输入随机数:")
print number
if number == verify:
print u"登录成功!!"
elif number == 132741:
print u"登录成功!!"
else:
print u"验证码输入有误!"
3)验证码识别技术:
可以通过 Python-tesseract 来识别图片验证码4)记录cookie:
可以通过 add_cookie()方法将用户名密码写入浏览器 cookie ,再次访问网站时服务器直接读取浏览器 Cookie 登录。