selenium+python自动化,学习笔记二(窗口切换等)

时间:2021-10-14 08:47:05

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 所生成的 alertconfirm 以及 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)

7.窗口截图:
driver.get_screenshot_as_file("D:\\baidu_error.jpg")
8.关闭窗口:

close()和qiut()

9.验证码处理:

1)去掉验证码:

2)设置万能码:

例:#coding=utf-8
import 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 登录。

 



 



 

 

 

 

 

 

 

selenium+python自动化,学习笔记二(窗口切换等)