zoukankan      html  css  js  c++  java
  • 004 selenium 窗口/下拉框/alert

    '''
    时间:2018/12/04
    功能:窗口/下拉框/alert
    目录:
        一: 窗口
            1 切换窗口
            2 关闭窗口
        二: 下拉框
            1 xpath
            2 select
        三: alert
            1 百度保存
            2 三种处理
        四: 未解决
            1 下拉框
    '''    

    一: 窗口
      1 切换窗口

    from selenium import webdriver
    import time
    
    driver = webdriver.Firefox()
    driver.get("https://www.hao123.com")
    
    # 获取句柄 - 当前窗口
    time.sleep(2)
    cur_handle = driver.current_window_handle
    print(cur_handle)
    driver.find_element_by_link_text("人民网").click()
    
    # 获取句柄 - 所有窗口
    time.sleep(2)
    all_handle = driver.window_handles
    print(all_handle)
    
    # 获取句柄 - 最新窗口
    new = all_handle[-1]
    driver.switch_to.window(new)
    print(driver.title)
    
    # 切换窗口 - 开始窗口
    driver.switch_to.window(all_handle[0])
    print(driver.title)

      2 关闭窗口

    from selenium import webdriver
    import time
    
    driver = webdriver.Firefox()
    driver.get("https://www.hao123.com")
    
    # 获取句柄 - 当前窗口
    time.sleep(2)
    cur_handle = driver.current_window_handle
    print(cur_handle)
    
    # 隐式等待 : 当前页面 - 全局有效
    driver.implicitly_wait(5)
    driver.find_element_by_link_text("人民网").click()
    
    # 获取句柄 - 所有窗口
    time.sleep(2)
    all_handle = driver.window_handles
    print(all_handle)
    
    # 获取句柄 - 最新窗口
    new = all_handle[-1]
    driver.switch_to.window(new)
    print(driver.title)
    
    # 切换窗口 - 开始窗口
    driver.switch_to.window(all_handle[0])
    print(driver.title)
    
    # 关闭窗口 - 起始窗口
    driver.close()
    
    # 关闭窗口 - 最新窗口
    driver.switch_to.window(all_handle[-1])
    driver.close()

    二: 下拉框
      1 xpath

    1 : 定位百度的搜索设置,页面显示条数。

     1 : 先使用搜狗浏览器自带工具,进行定位测试。

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    driver = webdriver.Firefox()
    driver.get("https://www.baidu.com")
    time.sleep(1)
    
    # 定位元素 - 搜索设置
    driver.implicitly_wait(5)    # 隐式等待 : 当前页面 - 全局有效
    mouse = driver.find_element_by_link_text("设置")
    ActionChains(driver).move_to_element(mouse).perform()
    driver.find_element_by_link_text("搜索设置").click()
    time.sleep(1)
    
    # 定位元素 - 每页显示
    driver.find_element_by_id("nr").click()
    time.sleep(2)
    driver.find_element_by_xpath(".//*[@id='nr']/option[3]").click()

      2 select

     1 : 查看源代码 select.py。

     1 : 查看源代码的定位方法。

    三种方法
       select_by_value
       select_by_index
       select_by_visible_text
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import Select
    import time
    
    driver = webdriver.Firefox()
    driver.get("https://www.baidu.com")
    time.sleep(1)
    
    # 定位元素 - 搜索设置
    driver.implicitly_wait(5)    # 隐式等待 : 当前页面 - 全局有效
    mouse = driver.find_element_by_link_text("设置")
    ActionChains(driver).move_to_element(mouse).perform()
    driver.find_element_by_link_text("搜索设置").click()
    time.sleep(1)
    
    # 定位元素 - select_by_index
    element = driver.find_element_by_id("nr")
    Select(element).select_by_index(2)
    element.click()
    
    # 定位元素 - select_by_value
    element = driver.find_element_by_id("nr")
    Select(element).select_by_value("50")
    element.click()
    
    # 定位元素 - select_by_value
    element = driver.find_element_by_id("nr")
    Select(element).select_by_visible_text("每页显示50条")
    element.click()


    三: alert
      1 百度保存

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import Select
    import time
    
    driver = webdriver.Firefox()
    driver.get("https://www.baidu.com")
    time.sleep(1)
    
    # 定位元素 - 搜索设置
    driver.implicitly_wait(5)    # 隐式等待 : 当前页面 - 全局有效
    mouse = driver.find_element_by_link_text("设置")
    ActionChains(driver).move_to_element(mouse).perform()
    driver.find_element_by_link_text("搜索设置").click()
    time.sleep(1)
    
    # 定位元素 - select_by_value
    element = driver.find_element_by_id("nr")
    Select(element).select_by_visible_text("每页显示50条")
    element.click()
    
    # 保存设置
    driver.find_element_by_xpath(".//*[@id='gxszButton']/a[1]").click()
    time.sleep(0.5)
    
    # alert弹窗
    alert = driver.switch_to.alert    # 切换窗口 - alert
    print(alert.text)                # 打印文本
    alert.accept()                    # 点击确定

      2 三种处理

    <html>  
    
    <head>  
    
       <title>Alert</title>  
    
        </head>  
    
    <body>  
    
        <input id = "alert" value = "alert" type = "button" onclick = "alert('这个叫alert');"/>  
    
        <input id = "confirm" value = "confirm" type = "button" onclick = "confirm('这个叫confirm');"/>  
    
        <input id = "prompt" value = "prompt" type = "button" onclick = "var name = prompt('这个叫prompt'); document.write(name) "/> 
           
        <iframe id = "iframe12"
            <input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">按钮
        </iframe>
        
    </body>   
    
    </html>  

     1 : 保存到桌面,命名为 alert.html。

    from selenium import webdriver
    import time
    
    driver = webdriver.Firefox()
    driver.get("file:///C:/Users/Administrator/Desktop/alert.html")
    time.sleep(1)
    
    # 定位元素 - alert
    driver.find_element_by_xpath(".//*[@id='alert']").click()
    time.sleep(0.5)
    
    # alert弹窗
    alert = driver.switch_to.alert    # 切换窗口 - alert
    print(alert.text)                # 打印文本
    alert.accept()                # 点击确定
    
    
    # 定位元素 - confirm
    driver.find_element_by_xpath(".//*[@id='confirm']").click()
    time.sleep(0.5)
    
    # alert弹窗
    alert = driver.switch_to.alert    # 切换窗口 - alert
    time.sleep(0.5)
    print(alert.text)            # 打印文本
    time.sleep(1)
    alert.dismiss()                # 点击取消
    
    
    # 定位元素 - confirm
    driver.find_element_by_xpath(".//*[@id='prompt']").click()
    time.sleep(0.5)
    
    # alert弹窗
    alert = driver.switch_to.alert    # 切换窗口 - alert
    print(alert.text)            # 打印文本
    alert.send_keys("test")        # 输入内容
    alert.accept()                # 点击确定

    1 : 分别对三种不同的结果进行处理。


    四: 未解决
      1 下拉框

    使用xpath定位,百度搜索-显示页面条数的下拉框,下拉框不自动缩回。
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    driver = webdriver.Firefox()
    driver.get("https://www.baidu.com")
    time.sleep(1)
    
    # 定位元素 - 搜索设置
    driver.implicitly_wait(5)    # 隐式等待 : 当前页面 - 全局有效
    mouse = driver.find_element_by_link_text("设置")
    ActionChains(driver).move_to_element(mouse).perform()
    driver.find_element_by_link_text("搜索设置").click()
    time.sleep(1)
    
    # 定位元素 - 每页显示
    driver.find_element_by_id("nr").click()
    time.sleep(2)
    driver.find_element_by_xpath(".//*[@id='nr']/option[3]").click()
    '''
    原因
        硬件
        系统(版本、位数)
        浏览器(品牌、版本、位数)
        selenium(版本)
        pycharm(品牌、版本、位数)
    '''
  • 相关阅读:
    Pandas包对多个数据表(DataFrame)的常用整合功能。
    pandas numpy 简单应用 loandata
    榛果 美团 登录 爬虫 requests session
    python 日期循环
    opencv 验证码 识别
    运行MapReduce任务
    CenOS安装MySQL服务
    leetcode 67. 二进制求和
    最近对一些领域比较感兴趣,这里列举出来供以后查阅
    leet code 1014. 最佳观光组合
  • 原文地址:https://www.cnblogs.com/huafan/p/10061942.html
Copyright © 2011-2022 走看看