美文网首页
python3使用selenium下篇

python3使用selenium下篇

作者: test小星星 | 来源:发表于2018-09-26 12:12 被阅读14次

    接上篇

    页面操作方法

    1. 多frame(框架)切换
    在Web应用中经常会遇到frame/iframe嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe内嵌页面上的元素无法直接定位,这时就通过switch_to.frame()方法将当前定位的主体切换为frame/iframe的内嵌页面中。

    from selenium import webdriver
    
    driver = webdriver.Firefox()
    driver.get('test_frame.html')
    # 切换到frame(id="if")的框架
    driver.switch_to.frame("if")
    # 下面就可以正常的操作里面的元素了
    driver.find_element_by_id("kw").send_keys("selenium")
    
    # 如果没有id和name的情况
    fr = driver.find_element_by_xpath('//*[@class="if"]')
    driver.switch_to.frame(fr)
    # 下面就可以正常的操作里面的元素了
    driver.find_element_by_id("kw").send_keys("selenium")
    

    switch_to.frame()可以直接取frame的id或name,如果没有id和name可以先通过xpath定位到iframe,再将定位对象传给switch_to.frame()方法。
    如果完成了在当前frame上的操作,则可以通过switch_to.parent_content()方法跳出当前一级表单,该方法默认对应与离它最近的switch_to.frame()方法,除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳回最外层的页面。
    2. 多窗口切换
    在页面操作过程中有时候点击某个链接会弹出新的窗口,这时候就需要主机切换到新打开的窗口上进行操作。
    操作方法:

    • 获得当前窗口的句柄
      sreach_windows = driver.current_window_handle
    • 获得当前所有打开的窗口句柄
      all_handles=driver.window_handles
    • 切换到相应的窗口
      switch_to.window()
    from selenium import webdriver
    
    driver = webdriver.Firefox()
    driver.get('http://www.baidu.com')
    
    # 获得当前窗口的句柄
    sreach_windows = driver.current_window_handle
    driver.find_element_by_link_text("地图")
    # 获得当前所有打开的窗口句柄
    all_handles=driver.window_handles
    # 切换到地图窗口
    for handle in all_handles:
        if handle != sreach_windows:
            driver.switch_to.window(handle)
             操作元素.....
    # 切换到原来窗口
    or handle in all_handles:
        if handle == sreach_windows:
            driver.switch_to.window(handle)
    

    3. 警告处理
    在页面操作中有时会遇到JavaScript所生成的alert、confirm以及prompt弹框,可以使用switch_to_alert()方法定位到。然后使用text/accept/dismiss/send_keys等方法进行操作。

    • switch_to_alert():获取当前页面上的警告框。
    • text:返回alert/confirm/prompt 中的文字信息。
    • accept():接受现有警告框。
    • dismiss():解散现有警告框。
    • send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。

    4. 操作Cookie
    WebDriver操作cookie的方法

    • get_cookies():获得所有cookie信息。
    • get_cookie(name):添加字典的key为"name"的cookie的信息。
    • add_cookie(cookie_dict):添加cookie。"cookie_dict'指字典对象,必须有name和value值。
    • delete_cookie(name, optionsString):删除cookie信息。"name"是要删除的cookie的名称,
      "optionsString"是该cookie的选项,目前支持的选项包括"路径","域"。
    • delete_all_cookies():删除所有cookie信息。

    5. 调用JavaScript代码
    WebDriver提供了execute_script()方法来执行javaSrcipt代码。

    js = "要执行的js代码"
    driver.execute_script(js)
    

    6. 窗口截图
    WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口。
    driver.get_screenshot_as_file("保存的路径')

    7. 判断元素是否存在

    from selenium import webdriver
    
    driver = webdriver.Firefox()
    driver.implicitly_wait(10)
    driver.get("http://www.baidu.com")
    
    
    def is_element_exist(css):
        try:
            driver.find_element_by_css_selector(css)
            return True
        except:
            return False
    print(is_element_exist('#kw'))
    
    # 判断页面上有无id为kw的元素
    if is_element_exist("#kw"):
        driver.find_element_by_id("kw").send_keys("selenium")
    # 判断页面有无标签为input元素
    if is_element_exist("input"):
        driver.find_element_by_tag_name("input").send_keys("selenium")
    # 判断页面有无id为xxx的元素
    if is_element_exist("xxx"):
        driver.find_element_by_id("xxx").send_keys("selenium")
    
    

    相关文章

      网友评论

          本文标题:python3使用selenium下篇

          本文链接:https://www.haomeiwen.com/subject/owddoftx.html