zoukankan      html  css  js  c++  java
  • 2.操作浏览器

    1.操作浏览器

     1 '''操作浏览器'''
     2 
     3 from selenium import webdriver      #从selenium里面的导入webdriver模块
     4 import time    #导入time模块
     5 
     6 driver = webdriver.Firefox()   #打开浏览器
     7 driver.get("http://www.baidu.com")         #打开访问的地址
     8 
     9 title=driver.title       #获取标题
    10 print(title)
    11 
    12 time.sleep(3)      #设置等待时间3秒
    13 driver.refresh()      #刷新页面
    14 
    15 driver.set_window_size(800,960)    #设置屏幕宽度和高度
    16 time.sleep(3)
    17 driver.maximize_window()     #屏幕最大化
    18 driver.find_element_by_id("kw").send_keys(u"博客园花儿爷")    #id定位并输入内容
    19 driver.find_element_by_id("su").click()      #点击事件
    20 driver.back()      #上一页
    21 time.sleep(3)
    22 driver.forward()   #下一页
    23 
    24 driver.get_screenshot_as_file("C:\Users\12978Desktop\1r.jpg")     #截屏保存文件
    25 
    26 driver.close()    #关闭当前窗口
    27 driver.quit()    #关闭浏览器'''

    2.操作元素(鼠标、键盘事件)

    1.鼠标操作元素

    1.输入字符串,如果输入中文,前面加u:send_keys(u"上海")

    2.点击事件: driver.find_element_by_id("su").click()

    3.清楚输入框:clear()

    4.回车键模拟提交表单:submit提交表单

     

    2.模拟键盘事件

    1.模拟键盘enter键使用submit()方法

    driver.find_element_by_id("su").submit()

    2.导入键盘模块

    From selenium.webdriver.common.keys import Keys

    3.模拟enter键

    driver.find_element_by_id("su").send_keys(Keys.ENTER)

    其他键盘操作如下:

    键盘F1到F12: send_keys(Keys.F1) 把F1改成对应键 

    复制Ctrl+C: send_keys(Keys.CONTROL,’C’)

    粘贴Ctrl+V: send_keys(Keys.CONTROL,’V’)

    全选Ctrl+A: send_keys(Keys.CONTROL,’A’)

    剪切Ctrl+X: send_keys(Keys.CONTROL,’X’)

    制表键Tab:send_keys(Keys.TAB)

    '''模拟键盘操作'''
    #从selenium里面的导入webdriver模块
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys      #键盘模拟模块
    import time    #导入time模块
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    driver.find_element_by_id("kw").send_keys("python")    #id定位并输入内容
    time.sleep(3)
    driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL,'a')     #键盘全选操作 Ctrl+A
    driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL,'c')      #键盘选择复制
    driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL,'x')      #键盘选择剪切
    
    driver.get("http://www.sogou.com/")
    time.sleep(3)
    
    driver.find_element_by_css_selector(".sec-input").send_keys(Keys.CONTROL,'v')       #粘贴复制内容
    time.sleep(2)
    
    driver.find_element_by_css_selector("#stb").send_keys(Keys.ENTER)  #点击搜索按钮
    
    time.sleep(3)
    driver.quit()

    3.鼠标悬停事件

    1.鼠标不仅仅可以点击(click),鼠标还有其它的操作,如:鼠标悬停在某个元素上,鼠标右击,鼠标按住某个按钮拖到

     2.鼠标事件需要先导入模块:from selenium.webdriver.common.action_chains import ActionChains

    perform() 执行所有ActionChains中的行为

    move_to_element() 鼠标悬停

    右击鼠标:context_click()

    双击鼠标:double_click()

    '''鼠标悬停'''
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains    #鼠标事件模块
    from time import sleep
    driver=webdriver.Firefox()
    
    driver.get("http://www.baidu.com")
    driver.maximize_window()
    
    driver.find_element_by_css_selector("#kw").send_keys("Python")
    
    # 获取搜索框元素对象
    element=driver.find_element_by_css_selector("#kw")
    
    sleep(3)
    
    ActionChains(driver).double_click(element).perform()        #双击操作
    
    sleep(2)
    
    
    ActionChains(driver).context_click(element).perform()       #右击操作
    
    sleep(3)
    
    #鼠标悬停
    mouse=driver.find_element_by_link_text("设置")
    ActionChains(driver).move_to_element(mouse).perform()           #鼠标悬停执行action chains中的行为
    driver.find_element_by_link_text("搜索设置").click()
    sleep(4)
    
    driver.quit()

     3.元素等待

    概念

    • 显示等待是针对某一个元素进行相关等待判定;
    • 隐式等待不针对某一个元素进行等待,全局元素等待。
    a.相关模块
    • WebDriverWait 显示等待针对元素必用
    • expected_conditions 预期条件类(里面包含方法可以调用,用于显示等待)
    • NoSuchElementException 用于隐式等待抛出异常
    • By 用于元素定位

    from selenium import webdriver

    from selenium.webdriver.common.by import By

    from selenium.webdriver.support.ui import WebDriverWait     #注意字母大写

    from selenium.webdriver.support import expected_conditions as EC

    from selenium.common.exceptions import NoSuchElementException

     

    '''元素等待'''
    #显示等待
    '''
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from time import sleep
    
    driver=webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    driver.find_element_by_css_selector("#kw").send_keys("Selenium")
    sleep(2)
    
    element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"su")))    #显示等待--判断搜索按钮是否存在
    element.click()
    sleep(3)
    
    driver.quit()
    '''
    #隐式等待
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    from time import sleep,ctime
    
    driver=webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    sleep(2)
    
    driver.implicitly_wait(5) #隐式等待时间设定 5秒
    
    #检测搜索框是否存在
    try:
        print(ctime())
        driver.find_element_by_css_selector("#kw").send_keys("Python")
        driver. find_element_by_css_selector("#su").click
    except NoSuchElementException as msg:
        print(msg)
    finally:
        print(ctime())
    
    sleep(3)
    driver.quit()

     4.多窗口切换

    浏览器窗口的属性用句柄(handle

    from  selenium import webdriver
    import time
    
    webdriver=webdriver.Firefox()
    webdriver.get("http://bj.ganji.com/")
    time.sleep(2)
    
    h = webdriver.current_window_handle   #获取当前页面的句柄
    print(h)
    
    webdriver.find_element_by_link_text("工作").click()
    all_h=webdriver.window_handles
    print(all_h)
    
    #切换句柄
    webdriver.switch_to_window(all_h[1])    #获取list里面第二个直接切换
    print(webdriver.title)
    
    webdriver.close()
    
    webdriver.switch_to_window(h)      #切换首句柄
    print(webdriver.title)
    
    webdriver.quit()

     5.select下拉框定位

    elect_by_index()  :通过索引定位

    select_by_value()  :通过value值定位

    select_by_visible_text() :通过文本值定位

    deselect_all()          :取消所有选项

    deselect_by_index()     :取消对应index选项

    deselect_by_value()      :取消对应value选项

    deselect_by_visible_text() :取消对应文本选项

    first_selected_option()  :返回第一个选项

    all_selected_options()   :返回所有的选项

    '''select下拉框'''
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains    #鼠标事件模块
    from selenium.webdriver.support.select import Select    #下拉框索引定位所需模块
    from time import sleep
    
    driver=webdriver.Firefox()
    driver.get("http://www.baidu.com")
    driver.implicitly_wait(20)
    
    #鼠标悬停到百度的设置按钮上
    mouse=driver.find_element_by_link_text("设置")
    ActionChains(driver).move_to_element(mouse).perform()           #鼠标悬停执行action chains中的行为
    driver.find_element_by_link_text("搜索设置").click()
    sleep(4)
    '''
    #1.select框定位
    #二次定位:分两步:先定位下拉框,在点击选项
    s=driver.find_element_by_id("nr")
    s.find_element_by_xpath("//option[@value='50']").click()
    
    #driver.find_element_by_id("nr").find_element_by_xpath("//option[@value='50']").click()   #第二种写法,合并一步完成
    
    #driver.find_element_by_xpath(".//*[@id='nr']/option[2]").click()   #自己写xpath一次定位,索引值从1算起
    
    #2.select模块根据属性或者索引定位
    s=driver.find_element_by_id("nr")  #通过索引,索引值从0算起
    Select(s).select_by_index(2)
    
    s=driver.find_element_by_id("nr")  #通过属性值定位
    Select(s).select_by_value(20)
    '''
    s=driver.find_element_by_id("nr")  #通过text文本内容定位
    Select(s).select_by_visible_text("每页显示50条")
    
    
    
    
    #driver.quit()

     6.alert弹窗

    text:获取文本值

    accept() :点击"确认"

    dismiss() :点击"取消"或者叉掉对话框

    send_keys() :输入文本值 --仅限于prompt,alertconfirm上没有输入框

    '''alertconfirmprompt'''
    from selenium import webdriver
    from time import sleep
    
    url="C:\Users\12978\Desktop\alert.html"
    driver=webdriver.Firefox()
    driver.get(url)
    sleep(4)
    
    driver.find_element_by_id("alert").click()  #定位按钮
    sleep(3)
    t=driver.switch_to_alert()   #获取弹窗文本内容
    print(t)
    
    t.accept()   #点击弹框确认按钮
    #t.dismiss()  #相当于x,取消
    sleep(3)

     7.上传图片、文件

    上传过程一般要打开一个系统的windows窗口,从窗口选择本地文件添加。所以一般会卡在如何操作本地window窗口。解决的方法很简单,只需要定位到上传按钮,然后通过send_keys添加本地文件路径即可

    from selenium import webdriver
    from time import sleep
    
    driver=webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    driver.find_element_by_css_selector(".soutu-btn").click()
    sleep(3)
    driver.find_element_by_css_selector(".upload-pic").send_keys(r"C:\Users\12978Pictures\12.jpg")
    
    #上传文件

    #driver.find_element_by_xpath("//*[@type='file']").send_keys("D:测试文档绘本单词.zip")
    sleep(3) # driver.quit()

     8.滚动条

    '''滚动条'''
    from selenium import webdriver
    from time import sleep
    
    url="https://www.baidu.com/"
    driver=webdriver.Firefox()
    driver.get(url)
    sleep(3)
    driver.maximize_window()
    driver.find_element_by_id("kw").send_keys(u"博客园花儿爷")    #id定位并输入内容
    driver.find_element_by_id("su").click()
    js="var action=document.documentElement.scrollTop=10000"
    driver.execute_script(js)
    sleep(2)
    
    #将滚动条拖到最顶部
    js="var action=document.documentElement.scrollTop=0"
    driver.execute_script(js)
    sleep(3)
    
    driver.quit()

     9.日历控件

    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.get("https://kyfw.12306.cn/otn/index/init")
    # 去掉元素的readonly属性
    js = 'document.getElementById("train_date").removeAttribute("readonly");'
    driver.execute_script(js)
    
    # 用js方法输入日期
    js_value = 'document.getElementById("train_date").value="2018-07-23"'
    driver.execute_script(js_value)
    
    
    # driver.find_element_by_id("train_date").clear()    # 清空文本后输入值
    # driver.find_element_by_id("train_date").send_keys("2018-07-23")
  • 相关阅读:
    HttpURLconnection的介绍
    HttpClient4.3教程 第三章 Http状态管理
    HttpClient4.3教程 第二章 连接管理
    HttpClient 4.3教程 第一章 基本概念
    HttpClient 4.3教程-前言
    数据结构
    数据结构
    HashMap底层源码剖析
    防止XSS 攻击集成springboot
    C——Network Saboteur (POJ2531)
  • 原文地址:https://www.cnblogs.com/huaerye/p/9329800.html
Copyright © 2011-2022 走看看