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


    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 输入值,这个alertconfirm没有对话框就不能用了,不然会报错。
    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 登录。



     



     

  • 相关阅读:
    spring管理hibernate,mybatis,一级缓存失效原因
    The constructor ClassPathXmlApplicationContext(String) refers to the missing type BeansException
    idea中Hibernate错误:无法解析表
    使用Dom4解析xml
    关于idea中新建web项目 webapp文件夹没有小蓝点 ,启动服务,访问不到解决方案
    解决VS编译太慢问题
    Entity FrameWork6 Code First带virtual关键字外键 Asp.Net WebApi无法返回实体类数据问题
    webapi请求返回{"$id":"1","Message":"请求的资源不支持 http 方法“GET”。"}
    WPF的BusyIndicator控件只显示遮罩层,不显示提示层问题
    [转]Mysql将数据分组后取出时间最近的数据
  • 原文地址:https://www.cnblogs.com/zoeya/p/6565494.html
Copyright © 2020-2023  润新知