zoukankan      html  css  js  c++  java
  • selenium+python实现查询和下载文件

    在bug管理系统上,按项目查询出来所有的bug,然后点击导出按钮,导出这个项目所有的bug,用selenium+python实现

    操作步骤如下:

    1、打开网址url

    2、输入用户名和密码,点击登录(不需要验证码)

    3、在项目框内输入项目编码,点击查询按钮

    4、点击导出按钮,弹框提示导出成功(导出不是同步导出的,这里点击导出只是发起了一个导出操作,等待1到2分钟后,再去导出页面查看是否导出成功)

    5、去导出页面下载导出的文件 xxxxxx.xls

    因为之前没有用过爬虫工具,但是知道有个selenium这个自动化测试框架,本身这个需求就很简单,找到几个输入框和按钮,顺序操作就行,登录也不需要验证码

    python用的是3.5版本,selenium用的是3.3 GeckoDriv

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    browser = webdriver.Firefox()
    
    browser.get('http://www.yahoo.com')
    assert 'Yahoo!' in browser.title
    
    elem = browser.find_element_by_name('p')  # Find the search box
    elem.send_keys('seleniumhq' + Keys.RETURN)
    
    browser.quit()

     

    先在selenium上抄了一个例子,一运行,发现了少了GeckoDriver,下载GeckoDriver,放在一个path路径下

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    browser = webdriver.Firefox()
    
    browser.get('http://www.xxxxxxx.com')  #这里地址用的是查询页面,如果没有登录就会跳转到登录页面,登录之后会自动跳到查询页面
    #assert 'Yahoo!' in browser  这行不要了
    
    username=browser.find_element_by_name('uid')#获取username输入框
    username.clear()  #先清空输入框
    username.send_keys(username)  #输入用户名
        
    password=browser.find_element_by_name('password')#获取username输入框
    password.clear()  #先清空输入框
    password.send_keys(password)  #输入密码
    password.send_keys(Keys.RETURN)  #输入密码之后输入RETURN特殊键实现登录,不用再定位登录按钮
    

    以上代码就实现了用户登录

    
    
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from time   #time。sleep()实现延时
    browser = webdriver.Firefox()
    
    browser.get('http://www.xxxxxxx.com')  #这里地址用的是查询页面,如果没有登录就会跳转到登录页面,登录之后会自动跳到查询页面
    #assert 'Yahoo!' in browser  这行不要了
    
    username=browser.find_element_by_name('uid')#获取username输入框
    username.clear()  #先清空输入框
    username.send_keys(username)  #输入用户名
        
    password=browser.find_element_by_name('password')#获取username输入框
    password.clear()  #先清空输入框
    password.send_keys(password)  #输入密码
    password.send_keys(Keys.RETURN)  #输入密码之后输入RETURN特殊键实现登录,不用再定位登录按钮
    time.sleep(3)  #延时3秒等待页面跳转
    browser.find_element_by_name('项目').send_keys(ID)  #定位到项目ID输入框并输入项目ID
    browser.find_element_by_id('search').click()  #定位到搜索按钮,并点击
    time.sleep(3)  #延时等待搜索结果
    browser.find_element_by_xpath('\').click() #定位到导出按钮,并点击
    time.sleep(3)  #延时 弹出导出提示框,提示用户到另外一个页面下载导出数据
    browser.find_element_by_xpath('\').click()#定位到弹出框上的确定按钮,点击确定隐藏提示框,以方便导出下一个项目的bug列表
    browser.get('http://www.yyyyyy.com')  #跳转到下载页面
    filelist=browser.find_elements_by_xpath('\')  #定位到文件列表中所有的文件
    for file in filelist:
        file.click() #点击保存文件   这里有个问题,firefox保存文件会有一个提示框,让你选择是保存还是打开
    
    

     

    百度了一下,在这里找到了方法http://www.51testing.com/html/50/598350-860378.html

    设置firefox的Profile:

    browser.download.dir:指定下载路径

    browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认路径

    browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器

    browser.helperApps.neverAsk.saveToDisk:对所给出文件类型不再弹出框进行询问

    profile = webdriver.FirefoxProfile()
    profile.set_preference('browser.download.dir', 'd:\')
    profile.set_preference('browser.download.folderList', 2)
    profile.set_preference('browser.download.manager.showWhenStarting', False)
    profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip')
    
    driver = webdriver.Firefox(firefox_profile=profile)

    最后就是延时,刚开始用的是time.sleep()实现延时,运行很慢,百度一下,在这里找到了,http://www.cnblogs.com/zl0372/p/selenium_python.html

    通过implicitly_wait()实现智能等待

    最终代码:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from time   #time。sleep()实现延时
    
    profile = webdriver.FirefoxProfile()
    profile.set_preference('browser.download.dir', 'd:\')
    profile.set_preference('browser.download.folderList', 2)
    profile.set_preference('browser.download.manager.showWhenStarting', False)
    profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip')
    
    browser = webdriver.Firefox(firefox_profile=profile)
     
    browser.get('http://www.xxxxxxx.com')  #这里地址用的是查询页面,如果没有登录就会跳转到登录页面,登录之后会自动跳到查询页面
    #assert 'Yahoo!' in browser  这行不要了
     
    username=browser.find_element_by_name('uid')#获取username输入框
    username.clear()  #先清空输入框
    username.send_keys(username)  #输入用户名
         
    password=browser.find_element_by_name('password')#获取username输入框
    password.clear()  #先清空输入框
    password.send_keys(password)  #输入密码
    password.send_keys(Keys.RETURN)  #输入密码之后输入RETURN特殊键实现登录,不用再定位登录按钮
    browser.implicitly_wait(5)  #延时3秒等待页面跳转
    browser.find_element_by_name('项目').send_keys(ID)  #定位到项目ID输入框并输入项目ID
    browser.find_element_by_id('search').click()  #定位到搜索按钮,并点击
    browser.implicitly_wait(5)  #延时等待搜索结果
    browser.find_element_by_xpath('\').click() #定位到导出按钮,并点击
    leep(3  #延时 弹出导出提示框,提示用户到另外一个页面下载导出数据
    browser.find_element_by_xpath('\').click()#定位到弹出框上的确定按钮,点击确定隐藏提示框,以方便导出下一个项目的bug列表
    browser.get('http://www.yyyyyy.com')  #跳转到下载页面
    filelist=browser.find_elements_by_xpath('\')  #定位到文件列表中所有的文件
    for file in filelist:
         file.click() #点击保存文件 

     

  • 相关阅读:
    [置顶] java得到前一个月的年月日时分秒
    Windows 8.1 Preview的新功能和新API
    oracle保证读一致性原理
    10161
    Qt国际化
    使用Maven管理依赖JAR文件,自定义项目布局,利用ANT生成不同的发布包
    Haxe2.10到Haxe3,NME到OpenFL的迁移备忘
    设置RichEdit相关颜色说明
    使用MFC CImage类绘制PNG图片时遇到的问题
    把网球计分招式重构到状态模式
  • 原文地址:https://www.cnblogs.com/bara/p/6592147.html
Copyright © 2011-2022 走看看