美文网首页
Selenium自动化的使用

Selenium自动化的使用

作者: leoryzhu | 来源:发表于2019-03-22 00:35 被阅读0次

    1、准备

    下载chrome版本对就的对应的驱动chromedriver,放在python 安装目录下的Scripts目录下

    2、安装selenium

    pip install selenium

    3、使用

    声明浏览器对象

    selenium支持很多浏览器,下面调用了Chrome浏览器,运行python 文件,将会打开Chrome浏览器

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    

    访问页面

    打开百度页面

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    
    browser.get("http://www.baidu.com")
    
    image.png

    查找元素

    单个元素查找

    查找元素的方法有

    find_element_by_name
    find_element_by_id
    find_element_by_xpath
    find_element_by_link_text
    find_element_by_partial_link_text
    find_element_by_tag_name
    find_element_by_class_name
    find_element_by_css_selector
    
    from selenium import webdriver
    
    browser = webdriver.Chrome()
    
    browser.get("http://www.baidu.com")
    
    su_id=browser.find_element_by_id('su')
    su_css=browser.find_element_by_css_selector("#su")
    su_xpath=browser.find_element_by_xpath("//*[@id='su']")
    print(su_id)
    print(su_css)
    print(su_xpath)
    
    image.png
    多元素查找

    同样的在单个元素中查找的方法在多个元素查找中同样存在:

    find_elements_by_name
    find_elements_by_id
    find_elements_by_xpath
    find_elements_by_link_text
    find_elements_by_partial_link_text
    find_elements_by_tag_name
    find_elements_by_class_name
    find_elements_by_css_selector
    

    元素交互操作

    对获取到的元素调用交互方法

    from selenium import webdriver
    import time
    
    browser=webdriver.Chrome()
    browser.get("https://www.taobao.com")
    input=browser.find_element_by_id('q')
    input.send_keys("手机")
    time.sleep(10)
    input.clear()
    input.send_keys("小米")
    button=browser.find_element_by_class_name('btn-search')
    button.click()
    time.sleep(10)
    browser.close()
    

    把动作附加到交互链中

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    import time
    
    browser=webdriver.Chrome()
    # browser.get("https://www.taobao.com")
    # input=browser.find_element_by_id('q')
    # input.send_keys("手机")
    # time.sleep(10)
    # input.clear()
    # input.send_keys("小米")
    # button=browser.find_element_by_class_name('btn-search')
    # button.click()
    # time.sleep(10)
    # browser.close()
    
    url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
    
    browser.get(url)
    #切换到目标元素所在的frame
    browser.switch_to_frame("iframeResult")
    
    #确定拖拽目标的起点
    source=browser.find_element_by_id("draggable")
    
    #确定拖拽目标的终点
    target=browser.find_element_by_id("droppable")
    
    #形成动作链
    actions=ActionChains(browser)
    actions.drag_and_drop(source,target)
    
    #执行
    actions.perform()
    '''
    1.先用switch_to_alert()方法切换到alert弹出框上
    2.可以用text方法获取弹出的文本 信息
    3.accept()点击确认按钮
    4.dismiss()相当于点右上角x,取消弹出框
    '''
    t=browser.switch_to_alert()
    print(t.text)
    time.sleep(2)
    t.accept()
    time.sleep(10)
    browser.close()
    

    执行JavaScript

    可以直接调用js方法实现一些操作
    比如拖动页面、弹框显示

    from selenium import webdriver
    browser=webdriver.Chrome()
    browser.get("https://www.zhihu.com/explore")
    browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
    browser.execute_script("alert('To Button')")
    browser.close()
    

    切换Frame

    通过switch_to.frame()和switch_to.parent_frame()进入和退出frame

    等待

    当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

    隐式等待

    到了一定的时间发现元素还没有加载,则继续等待我们指定的时间,如果超过了我们指定的时间还没有加载就会抛出异常,如果没有需要等待的时候就已经加载完毕就会立即执行

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.implicitly_wait(10)
    browser.get('https://www.zhihu.com/explore')
    input = browser.find_element_by_class_name('zu-top-add-question')
    print(input)
    

    浏览器的前进和后退

    back()
    forward()

    cookie

    get_cookies()
    delete_all_cookes()
    add_cookie()

    选项卡操作

    通过执行js命令实现新开选项卡window.open()
    不同的选项卡是存在列表里browser.window_handles
    通过browser.window_handles[0]就可以操作第一个选项卡

    import time
    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.get('https://www.baidu.com')
    browser.execute_script('window.open()')
    print(browser.window_handles)
    browser.switch_to_window(browser.window_handles[1])
    browser.get('https://www.taobao.com')
    time.sleep(1)
    browser.switch_to_window(browser.window_handles[0])
    browser.get('https://python.org')
    

    异常处理

    这里的异常比较复杂,这里只进行简单的演示,查找一个不存在的元素

    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException, NoSuchElementException
    
    browser = webdriver.Chrome()
    try:
        browser.get('https://www.baidu.com')
    except TimeoutException:
        print('Time Out')
    try:
        browser.find_element_by_id('hello')
    except NoSuchElementException:
        print('No Element')
    finally:
        browser.close()
    

    相关文章

      网友评论

          本文标题:Selenium自动化的使用

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