selenium2学习

自动化介绍:UI自动化测试

Selenium简介:测试web应用程序用户界面(ui)的常用框架
pip install selenium==2.53.6

#pip install selenium or pip install-U selenium
#python setup.py install
from selenium import selenium
python -m pydoc -p   #查看帮助文档

配置apache服务器:

将项目放入webapps下
bin目录下startup.bat启动服务器
浏览器输入:localhost:8080/login.jsp 访问,localhost可变本ip地址


操作浏览器:

#打开浏览器:导宝-打开浏览器-获取网址-关闭窗口
from selenium import webdriver #导入包

ie

driver=webdriver.Ie()

谷歌chromedriver

#引入chromedriver.exe
chromedriver = r"C:\Users\11111\AppData\Local\Google\Chrome\Application\chromedriver.exe"
driver=webdriver.Chrome(chromedriver)

火狐FireFox

driver=webdriver.Firefox()

窗口操作

driver.get(r'https://www.baidu.com/') #打开网址
time.sleep(second) #休眠second秒,需要import time包
driver.refresh() #刷新页面
driver.back() #返回上一页
driver.forward() #进入下一页
driver.maxmize_window() #窗口最大
driver.set_window_size(width,hight)  #指定窗口大小
driver.get_screenshot_as_file("path.jpg") #截取全屏定义图片位置&名字
driver.close() #关闭窗口
driver.quit() #关闭窗口,以进程的形式
driver.name    #获取浏览器名称
driver.page_source    #页面源码

加载插件

url=r"C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\sgycpmyp.default"    #找到配置文件路径
profile=webdriver.FirefoxProfile(url)
driver=webdriver.Firefox(profile)

元素的定位:(element单数/elements复数)

element/By定位:

    from selenium.webdriver.common.by import By
        ~  .find_element(self, by=By.ID, value=None)
        ~  .find_element("id","kw")

id定位:

    from selenium import webdriver
        ~  .find_element_by_id(value)

name定位:

    from selenium import webdriver
        ~  .find_element_by_name(value)

class_name定位:

    from selenium import webdriver
        ~  .find_element_by_class_name(value)

css定位:

    from selenium import webdriver
    #代表id属性
    .代表class属性
        ~  .find_element_by_css_selector(value)
    标签
        ~  .find_element_by_css_selector("input")
    父子标签
        ~  .find_element_by_css_selector("input>input")
    标签属性
        ~  .find_element_by_css_selector("[name='kw']")
    标签组合
        ~  .find_element_by_css_selector("input.kw>input>a>tr#su")
    #通过层级关系
        #//form[id='form'']/span/input
    #通过逻辑运算不需要and
        # "input[id='kw'][name='wd']"
        # dri.find_element_by_css_selector("input[id='kw'][name='wd']").send_keys(u"哈哈") 

link_text定位:

    from selenium import webdriver
        ~  .find_element_by_link_text(value)

partial_link_text定位:

    from selenium import webdriver
        ~  .find_element_by_partial_link_text(value)

tag_name定位:

    from selenium import webdriver
        ~  .find_element_by_tag_name(value)

xpath定位:W3C标准,xpath同一级别多个标签从1开始

    from selenium import webdriver
        ~  .find_element_by_xpath(value)
    表达式:
        nodename    选取此节点所有子节点
        /    从根节点选取
        //    从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
        .    选取当前节点
        ..    选取当前节点的父节点
        @    选取属性
    
    
        
            HarryPotter<title>
            <author>JK.Rowling<author>
            <year>2005<year>
            <price>29.99<price>
        </book>
    </bookstore>
    /bookstore/book[1]
    /boolstore/book[last()]
    /bookstore/book[last()-1]
    /bookstore/book[postion()<3]
    driver.current_window_handle()     #获得当前窗口句柄    //title[@lang]
    //title[@lang='eng']
    /bookstore/book[price>35.00]
    /bookstore/book[price>35.00]/title
    标签:#input标签如果只有一个则可以不用[x]
    dri.find_element_by_xpath("/html/body/div/div/div/div/div/form/span/input")
    标签属性:
    dri.find_element_by_xpath("//input[@id='su']")
    超链接:
    dri.find_element_by_xpath("//a[@href='http://home.baidu.com']")
    标签属性组合
    dri.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']") #属性组合的形式
    文本值定位:
    dri.find_element_by_xpath("//a[contains(text(),'新闻')]") #标签之间存在唯一的文本值
    模糊定位:
    dri.find_element_by_xpath("//a[contains(@href,'xueshu')]") #其他属性值过长时,可以使用此方法
    #网页中动态属性的定位
    #start-with()
    dri.find_element_by_xpath("//input[start-with(@name,'ti_trhao')]")
    #end-with()
    dri.find_element_by_xpath("//input[end-with(@name,'ti_trhao')]")
    #contains()
    dri.find_element_by_xpath("//input[contains(@id,'username')]")
    #多标签多属性组合式定位
    dri.find_element_by_xpath("//input[@id='kw1]//input[start-with(@id,'nice')]/div[1]/form[3]")
</code></pre> 
 <hr> 
 <h1>元素的属性值:</h1> 
 <p>元素.get_attribute(属性名) #获取定位到的元素的指定属性值<br> 元素.size #获取输入框尺寸<br> 元素.text #获取百度页面备案信息<br> 元素.tag_name #获取标签名<br> 元素.is_displayed() #返回元素是否可见(true/false)<br> driver.title #当前页面标题<br> driver.current_url #当前页面url</p> 
 <hr> 
 <h1>鼠标事件</h1> 
 <pre><code>from selenium.webdriver.common.action_chains import ActionChains
</code></pre> 
 <p>常用方法:<br> perform() #执行所有actionchains中的行为<br> move_to_element() #鼠标悬停<br> context_click() #右击鼠标<br> double_click() # 双击鼠标<br> drag_and_drop(source,target) #拖动鼠标</p> 
 <h2>鼠标悬停在搜索设置按钮上</h2> 
 <pre><code>    mouse=driver.find_element_by_link_text("设置"')
    ActionChains(driver).move_to_ element(mouse).perform()
</code></pre> 
 <hr> 
 <h1>键盘事件</h1> 
 <pre><code>from selenium.webdriver.common.keys import Keys
</code></pre> 
 <h2>删除/Backspace</h2> 
 <pre><code>send_keys(Keys.BACK_SPACE)
</code></pre> 
 <h2>空格/space</h2> 
 <pre><code>send_keys(Keys.SPACE)
</code></pre> 
 <h2>制表/tab</h2> 
 <pre><code>send_keys(Keys.TAB)
</code></pre> 
 <h2>回退/esc</h2> 
 <pre><code>send_keys(Keys.ESCAPE)
</code></pre> 
 <h2>回车/enter</h2> 
 <pre><code>send_keys(Keys.ENTER)
</code></pre> 
 <h2>全选/ctrl+a</h2> 
 <pre><code>send_keys(Keys.CONTROL,'a')
</code></pre> 
 <h2>复制/ctrl+c</h2> 
 <pre><code>send_keys(Keys.CONTROL,'c')
</code></pre> 
 <h2>剪切/ctrl+x</h2> 
 <pre><code>send_keys(Keys.CONTROL,'x')
</code></pre> 
 <h2>粘贴/ctrl+v</h2> 
 <pre><code>send_keys(Keys.CONTROL,'v')
</code></pre> 
 <h2>键盘F1...F12</h2> 
 <pre><code>send.keys(Keys.F1/F12)
</code></pre> 
 <hr> 
 <h1>等待</h1> 
 <h2>显式等待:</h2> 
 <pre><code>    from selenium.webdriver.support.ui  import WebDriverWait
    from selenium.webdriver.support.ui  import excepted_conditions as EC
    from selenium.webdriver.common.by import By
</code></pre> 
 <h3>判断元素Expected Conditions的使用场景有2种:</h3> 
 <p>直接在断言中使用<br> 与WebDriverWait配合使用,动态等待页面上元素出现或者消失<br> element=WebDriverWait.(driver,timeout,poll_friquency=0.5,ignored_exceptions=None)<br> driver:浏览器驱动<br> timeout=:最长超时时间<br> poll_frequency:检测的间隔<br> ignored_exceptions:超时后的异常信息,默认是NoSuchElementException<br> 方法注释::<br> until(method,message=' '):<br> notuntil(method,message=' '):<br> exception_conditions类方法注释::<br> title_is() #判断当前页面的title是否精确等于预期<br> title_contains() #判断当前页面的title是否包含预期字符串<br> presence_of_ele: ment_located() #判断某个元素是否被加到了dom树里,并不代表该元素一定可见<br> visibility_of_element_located() #判断某个元素是否可见.可见代表元素非隐藏,并且元素的宽和高都不等于0<br> visibility_of() #跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了<br> presence_of_all_elements_located() #判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是'column-md-3',那么只要有1个元素存在,这个方法就返回True<br> text_to_be_present_in_element() # 判断某个元素中的text是否包含了预期的字符串<br> text_to_be_present_in_element_value() # 判断某个元素中的value属性是否包含了预期的字符串<br> frame_to_be_available_and_switch_to_it() # 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False<br> invisibility_of_element_located() # 判断某个元素中是否不存在于dom树或不可见<br> element_to_be_clickable() # 判断某个元素中是否可见并且是enable的,这样的话才叫clickable<br> staleness_of() # 等某个元素从dom树中移除,注意,这个方法也是返回True或False<br> element_to_be_selected() # 判断某个元素是否被选中了,一般用在下拉列表<br> element_selection_state_to_be() # 判断某个元素的选中状态是否符合预期<br> element_located_selection_state_to_be() # 跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator<br> alert_is_present() # 判断页面上是否存在alert</p> 
 <h2>隐式等待:</h2> 
 <p>driver.implicitly_wait(seconds)<br> Sleep休眠方法:<br> import time</p> 
 <h3>selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep()):</h3> 
 <p>sleep(): 强制等待,设置固定休眠时间。 python 的 time 包提供了休眠方法 sleep() , 导入 time 包后就可以使用 sleep(),进行脚本的执行过程进行休眠。<br> implicitly_wait():隐式等待,也叫智能等待,是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。<br> WebDriverWait():显示等待,同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为: NoSuchElementException<br> python selenium 显示等待WebDriverWait与条件判断expected_conditions举例:</p> 
 <pre><code>    #coding=utf-8  
    from selenium import webdriver  
    from selenium.webdriver.common.by import By  
    from selenium.webdriver.support import expected_conditions as EC  
    from selenium.webdriver.support.wait import WebDriverWait  

    driver.implicitly_wait(5)  
        '''''隐式等待和显示等待都存在时,超时时间取二者中较大的'''   
    WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道"))  
        '''''判断title,返回布尔值'''  
  
    WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))  
        '''''判断title,返回布尔值'''  
  
    WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))  
        '''''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement'''  
  
    WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su')))  
        '''''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''  
  
    WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw')))  
        '''''判断元素是否可见,如果可见就返回这个元素'''  
  
    WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav')))  
        '''''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''  
  
    WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,'.mnav')))  
        '''''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''  
  
    WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u'设置'))  
        '''''判断指定的元素中是否包含了预期的字符串,返回布尔值'''  
    WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下'))  
        '''''判断指定元素的属性值中是否包含了预期的字符串,返回布尔值'''  
  
    #WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(locator))  
        '''''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''  
        #注意这里并没有一个frame可以切换进去 
  WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))  
        '''''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''  
        #注意#swfEveryCookieWrap在此页面中是一个隐藏的元素  
  
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click()  
        '''''判断某个元素中是否可见并且是enable的,代表可点击'''  
        driver.find_element_by_xpath("//*[@id='wrapper']/div[6]/a[1]").click()  
        #WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='wrapper']/div[6]/a[1]"))).click()  
  
    #WebDriverWait(driver,10).until(EC.staleness_of(driver.find_element(By.ID,'su')))  
        '''''等待某个元素从dom树中移除'''  
        #这里没有找到合适的例子  
  
    WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]")))  
        '''''判断某个元素是否被选中了,一般用在下拉列表'''  
  
    WebDriverWait(driver,10).until(EC.element_selection_state_to_be(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]"),True))  
        '''''判断某个元素的选中状态是否符合预期'''  
  
    WebDriverWait(driver,10).until(EC.element_located_selection_state_to_be((By.XPATH,"//*[@id='nr']/option[1]"),True))  
        '''''判断某个元素的选中状态是否符合预期'''  
        driver.find_element_by_xpath(".//*[@id='gxszButton']/a[1]").click()  
  
    instance = WebDriverWait(driver,10).until(EC.alert_is_present())  
        '''''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容'''  
        print instance.text  
        instance.accept()
</code></pre> 
 <hr> 
 <h1>多表单切换:</h1> 
 <pre><code>location=driver.findelement(locator)
switch_to.frame(id/name/location)
switch_to_frame()
switch_to.parent_content()    #跳出当前一级表单
switch_to.default_content()     #跳回最外面页面
dri.switch_to_default_content()    #跳回当前默认窗口
</code></pre> 
 <hr> 
 <h1>多窗口切换:</h1> 
 <pre><code>driver.window_handles()     #获取打开窗口的句柄
driver.switch_to.window(handle)     #用于切换到相应的窗口
switch_to_window
</code></pre> 
 <hr> 
 <h1>上传文件:</h1> 
 <p>import SendKeys<br> 示例网址:http://www.sahitest.com/demo/php/fileUpload.htm<br> input标签:<br> input输入框:<br> 元素.sendkeys(r"path")<br> input非输入框→input按钮:<br> SendKeys.SendKeys(r"path") # 发送文件地址,在输入法不是系统默认的输入发时候,路径的输入可能在第三方输入法的输入框中<br> time.sleep(1)<br> SendKeys.SendKeys("{ENTER}") # 发送回车键<br> AutoiIt:<br> https://www.autoitscript.com/site/autoit/downloads/<br> AutoiIt window info #识别控件信息<br> Scite script editor #编辑脚本<br> 脚本方法:<br> ControlFocus("title","窗口文本",controlID) #设置输入焦点到指定窗口的某个控件上<br> WinWait("title题","窗口文本",超时时间) #暂停脚本的执行直至指定窗口存在(出现)为止<br> ControlSetText("title","窗口文本",controlID,"新文本") #修改指定控件文本<br> Sleep(延迟)<br> ControlClick("title","窗口文本",控件ID,按钮,点击次数) #向指定控件发送鼠标点击命令<br> tools→go/F5 :执行<br> import os<br> os.system(au3脚本路径)</p> 
 <hr> 
 <h1>文件下载</h1> 
 <h2>FireFox下载:</h2> 
 <p>profile=webdriver.FireFox Profile () #获取 Profile<br> profile.set_preference("属性","值") #设置 Profile 属性<br> 属性:<br> browser.download.dir:指定下载路径<br> browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认路径<br> browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器<br> browser.helperApps.neverAsk.saveToDisk:对所给出文件类型不再弹出框进行询问<br> eg:<br> profile = webdriver.FirefoxProfile()<br> profile.set_preference('browser.download.dir', 'd:\')<br> profile.set_preference('browser.download.folderList', 2)<br> profile.set_preference('browser.download.manager.showWhenStarting', False)<br> profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip')<br> driver = webdriver.Firefox(firefox_profile=profile)</p> 
 <h2>Charm下载:</h2> 
 <p>属性:<br> download.default_directory:设置下载路径<br> profile.default_content_settings.popups:设置为 0 禁止弹出窗口<br> eg:<br> options = webdriver.ChromeOptions()<br> prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\'}<br> options.add_experimental_option('prefs', prefs)<br> driver = webdriver.Chrome(executable_path='D:\chromedriver.exe', chrome_options=options)</p> 
 <hr> 
 <h1>各种框处理:</h1> 
 <h2>下拉框:</h2> 
 <p>Select:<br> from selenium.webdriver.support.ui import Select<br> Select(driver.find_element("key","value")).select_by_index(self,index)<br> .select_by_visible_text(self,text)<br> .select_by_value(self,value)<br> e.g.<br> Select(driver.find_element_by_name("NR")).select_by_index(2)<br> Select(driver.find_element_by_name("NR")).select_by_visible_text("每页显示50条")<br> Select(driver.find_element_by_name("NR")).select_by_value('50')<br> Select类方法:<br> select_by_index() :通过索引定位<br> select_by_value() :通过value值定位<br> select_by_visible_text() :通过文本值定位<br> deselect_all() :取消所有选项<br> deselect_by_index() :取消对应index选项<br> deselect_by_value() :取消对应value选项<br> deselect_by_visible_text() :取消对应文本选项<br> first_selected_option() :返回第一个选项<br> all_selected_options() :返回所有的选项<br> CSS:<br> dri.find_element_by_css_selector("select#nr>option:nth-child(3)").click()<br> dri.find_element_by_css_selector("select#nr>option[@value='30']:nth-child()").click()<br> 定位父元素select(下面语句中的id=aaa),然后通过tag name找到所有option,得到option元素的数组,然后通过数组索引([1])定位,最后click:<br> driver.find_element_by_id("aaa").find_elements_by_tag_name("option")[1].click()<br> 跟第1条差不多思想,不过用option元素的value属性来定位了,下面代码是通过xpath来写的,可以换成 by_css:<br> driver.find_element_by_xpath("//select[@id='aaa']").find_element_by_xpath("//option[@value='5PM']").click()</p> 
 <h2>弹框(警告框处理):</h2> 
 <p>switch_to.alert()<br> switch_to_alert() #定位到弹框<br> text #获取弹框文本<br> accept() #接受/确定弹框<br> dismiss() #解散/关闭弹框<br> send_keys(value) #发送文本至弹框<br> eg:<br> dt=driver.switch_to_alert() / dt=driver.switch_to.alert()<br> dt.accept()</p> 
 <h2>复选框:</h2> 
 <p>driver.find_element_by_css_selector("span#li>input:nth-child(2)").click()<br> .pop().click() #最后一个点击<br> .pop(-1):默认获取一组元素的最后一个<br> .pop(0):默认获取一组元素的第一个<br> .pop(1):默认获取一组元素的第二个<br> list=dri.find_elements_by_xpath("//*[@type='checkbox']") #获取所有框<br> print list<br> for x in list:<br> if x.get_attribute("value")=="lan": #选择符合条件的框<br> x.click()<br> dri.find_element_by_css_selector("span#li>input:nth-child(2)").is_selected() #是否被选</p> 
 <hr> 
 <h1>抓捕异常:</h1> 
 <pre><code>from selenium.common.exceptions import *
try:
    ...
except Exception,e:
    ...
else:
    ...
(finally:)
    ...
</code></pre> 
 <hr> 
 <h1>JS定位:</h1> 
 <pre><code>document.getElementById("id")
document.getElementsByName("name")[0].value="test"      返回列表,如果只有一个取下标0
document.getElementsByTagName("tag")
document.getElementsByClassName("class")
document.querySelectorAll()
eg:
jsusename='document.getElementById("account").clear()'
dri.execute_script(jsusename)
jspassword='document.getElementById("account").value="admin"'
dri.execute_script(jspassword)
</code></pre> 
 <h2>JS日期:</h2> 
 <pre><code>#移除属性
js='document.getElementById("train_date").removeAttribute("readonly");'
dri.execute_script(js)
#jQuery方法移除属性
# js="$('input[id=train_date]').removeAttr('readonly')"     #1移除属性
# js="$('input[id=train_date]').Attr('readonly',false)"     #2设置为false
# js="$('input[id=train_date]').removeAttr('readonly','')"     #3设置为空,同2
#用js方法输入日期
time.sleep(5)
jsdate='document.getElementById("train_date").value="2018-05-01"'
dri.execute_script(jsdate)
</code></pre> 
 <hr> 
 <h1>单元测试:</h1> 
 <pre><code>#test方法必须 要以test开头
import unittest
class IntegerArithmeticTestCase(unittest.TestCase):
    def setUp(self):
        self.dri = webdriver.Firefox()
        self.dri.get(r"https://www.baidu.com/")
        time.sleep(3)
    def tearDown(self):
        time.sleep(3)
        self.dri.close()
    def testlogin(self):
        self.dri=webdriver.Firefox()
        self.dri.get(r"https://www.baidu.com/")
        self.dri.find_element_by_id("kw").send_keys("test")
        time.sleep(3)
        self.dri.find_element_by_id("su").click()
        time.sleep(3)
        titles=self.dri.title
        self.assertEqual(titles,u"test_百度搜索")

if __name__=='__main__':
    unittest.main()
</code></pre> 
 <p>① setup():每个测试函数运行前运行<br> ② teardown():每个测试函数运行完后执行<br> ③ setUpClass():必须使用@classmethod装饰器,所有test运行前运行一次<br> ④ tearDownClass():必须使用@classmethod装饰器,所有test运行完后运行一次</p> 
 <h2>单元测试用例:</h2> 
 <pre><code>import unittest
import HTMLTestRunner
class Reports(unittest.TestCase):
    def testpanduan01(self):
        self.assertEqual(1,6)
    def testpanduan02(self):
        self.assertIn("aaa","aaaaabbbbbccccdddd")
if __name__=="__main__":
    # 指定执行测试用例
    testunit=unittest.TestSuite()
    testunit.addTest(Reports("testpanduan01"))
    testunit.addTest(Reports("testpanduan02"))
    #增加时间
    now=timereport=time.strftime("%Y%m%d%S%M%S")
    uu="panduanReport.html"
    print timereport+uu
    # fp=open(now+"panduanReport.html","w")
    # 写测试报告
    fp=open("panduanReport"+now+".html","w")
    runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u"测试报告书",description=u"这是测试报告的描述")
    runner.run(testunit)
</code></pre> 
 <p>断言语法 解释<br> assertEqual(a, b) 判断a==b<br> assertNotEqual(a, b) 判断a!=b<br> assertTrue(x) bool(x) is True<br> assertFalse(x) bool(x) is False<br> assertIs(a, b) a is b<br> assertIsNot(a, b) a is not b<br> assertIsNone(x) x is None<br> assertIsNotNone(x) x is not None<br> assertIn(a, b) a in b<br> assertNotIn(a, b) a not in b<br> assertIsInstance(a, b) isinstance(a, b)<br> assertNotIsInstance(a, b)</p> 
 <h2>单元测试修饰器:</h2> 
 <pre><code>class login(unittest.TestCase):
#setup().teardowm()每个用例都执行,+class后添加修饰器@classmethod...之开始结束执行一次
    # def setUp(self):
    @classmethod
    def setUpClass(cls):
        cls.dri=webdriver.Firefox()
        cls.dri.get(r"https://www.baidu.com/")
        print "start*******************"
    # def tearDown(self):
    @classmethod
    def tearDownClass(cls):
        cls.dri.close()
        print "%%%%%%%%%%%%%%%%%%%%%end"
    @unittest.skip("msg") #跳过测试用例
    def test001(self):
        print "this is num1"
    def test002(self):
        print "this is num2"
#test用例执行顺序.根据ASCLL
#   0-9  A-Z    a-z
</code></pre> 
 <h2>等待:</h2> 
 <pre><code>from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
</code></pre> 
 <hr> 
 <h1>操作excel:</h1> 
 <p>import xlrd</p> 
 <h2>打开excel文件</h2> 
 <p>data=xlrd.open_workbook("test.xlsx")</p> 
 <h2>获取指定sheet</h2> 
 <p>table=data.sheets()[0]<br> table=data.sheet_by_index(0)<br> table=data.sheet_by_name("Sheet1")</p> 
 <h2>row行 col列</h2> 
 <h3>行数a</h3> 
 <p>a=table.nrows</p> 
 <h3>列数b</h3> 
 <p>b=table.ncols</p> 
 <h3>第一行的值</h3> 
 <p>table.row_values(0)</p> 
 <h3>第一列的值</h3> 
 <p>table.col_values(0)</p> 
 <h2>python读取Excel实例</h2> 
 <p>(1)安装python官方Excel库-->xlrd<br> (2)获取Excel文件位置并读取<br> (3)读取sheet<br> (4)读取指定rows和cols内容</p> 
 <h2>DDt:</h2> 
 <p>import ddt<br> data=[存放字典数据n对]<br> 类名前用修饰器@ddt.ddt<br> class Ddtdemo(unittest.TestCase):<br> 测试用例test<em>前用修饰器@ddt.data(</em>data) *data 表示传入所有的数据<br> def testdemo(self,data):</p> 
 <h2>data从excel读取数据文件:</h2> 
 <p>data1=filesname.classname("init参数文件") init参数文件是读取文件方法类的传入参数<br> data=filesname.classname.waysname(data1)</p> 
 <p>range() 函数可创建一个整数列表,一般用在 for 循环中<br> range(start, stop[, step])<br> start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);<br> stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5<br> step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)</p> 
 <h2>python的ConfigParser模块:</h2> 
 <p>该模块的作用 就是使用模块中的RawConfigParser()、ConfigParser()、 SafeConfigParser()这三个方法(三者择其一),创建一个对象使用对象的方法对指定的配置文件做增删改查 操作。<br> 在调用这三个函数时,切记这三个函数会将调用optionxform(),在传递键值对数据时,会将键名 全部转化为小写:<br> RawConfigParser():<br> ConfigParser.RawConfigParser([defaults[, dict_type[, allow_no_value]]])<br> defaults : 如果指定默认值,则使用默认值的键值对<br> dict_type:使用新的section的键值对<br> allow_no_value :默认是False,如果是True,表示可以接收空值(None)<br> return:对象<br> ConfigParser():<br> ConfigParser.ConfigParser([defaults[, dict_type[, allow_no_value]]])<br> SafeConfigParser():<br> ConfigParser.SafeConfigParser([defaults[, dict_type[, allow_no_value]]])</p> 
 <h2>Python os.path 模块介绍:</h2> 
 <p>os.path.abspath(path) 返回path规范化的绝对路径(但这个路径不一定是真实的路径),如果path仅是一个文件名,使用该函数后返回的路径是当前工作目录路径连接改文件名后所组成的新的路径名。<br> os.path.split(path) 将path分割成目录和文件名二元组返回<br> os.path.dirname(path) 返回path的目录,其实就是os.path.split(path)的第一个元素<br> os.path.basename(path) 返回path最后的文件名。如果path以/或\结尾,就会返回空值。即os.path.split(path)的第二个元素。<br> os.path.commonprefix(list) 返回list中所有path共有的最长的路径,从左向右,相同字符。<br> os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False。<br> os.path.isabs(path) 如果path是绝对路径,返回True。<br> os.path.normpath(path) 规范path字符串形式(规范文件路径)<br> os.path.isfile(path) 判断路径是否为文件,是返回True,否则返回False<br> os.path.isdir(path) 如果path是一个存在的目录,返回True,否则返货False。<br> os.path.islink(path) 是否是链接;但如果系统不支持链接,则返回False。<br> os.path.join(path1 [, path2 [, ….]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略。<br> os.path.normcase(path) 在Linux下,该函数会原样返回path,在Windows平台上会将路径中所有的字符转换为小写,并将所有斜杠转换为反斜杠,同时将路径规范化。<br> os.path.splitdrive(path) 拆分驱动器和路劲,主要对win,对Linux元组第一个总是空的。<br> os.path.splitext(path) 分离文件名与扩展名;默认返回(fname, fextension)元组,可做分片操作,以” . “为分隔符。<br> os.path.getsize(filename) 返回文件的大小(单位字节),如果filename为目录返回0L<br> os.path.getatime(filename) 返回文件或目录的最后存取时间。<br> os.path.getctime(filename)返回浮点数的文件或目录的创建时间,在类Unix系统上是文件最近更改的时间,在Windows上是文件或目录的创建时间。<br> os.path.getmtime(filename) 返回文件或目录的最后修改时间<br> os.path.walk(top, func, arg):列出目录树下的目录路径和文件路劲<br> 参数说明:<br> top:表示需要遍历的目录树的路径<br> func:表示回调函数,对遍历路径进行处理。所谓回调函数,是作为某个函数的的参数使用,当某个时间触发时,程序将调用定义好的回调函数处理某个任务。回调函数必须提供3个参数:第1个参数为walk()的参数tag,第2个参数表示目录列表,第3个参数表示文件列表。<br> arg:是传递给回调参数func的元组.回调函数的一个参数必须是arg,为回调函数提供处理参数.参数arg可以为空。</p> 
 <hr> 
 <h1>编码格式:</h1> 
 <p>unicodeתutf-8:<br> import sys<br> reload(sys)<br> sys.setdefaultencoding('utf-8')</p> 
 <hr> 
 <h1>封装包的定义:</h1> 
 <p>封装:<br> common:基础方法<br> case:测试用例<br> page:配置,查找定位页面元素<br> exec.py顶层文件作为main函数,执行所有的测试用例<br> 我的定义:<br> page:页面定位元素,文本,弹框,文本值<br> case:测试用例<br> common:继承page类后的测试用例方法<br> source:资源配置设置与读取</p> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1382472239357710336"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(selenium2学习)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1835514464028422144.htm"
                           title="情绪觉察日记第37天" target="_blank">情绪觉察日记第37天</a>
                        <span class="text-muted">露露_e800</span>

                        <div>今天是家庭关系规划师的第二阶最后一天,慧萍老师帮我做了个案,帮我处理了埋在心底好多年的一份恐惧,并给了我深深的力量!这几天出来学习,爸妈过来婆家帮我带小孩,妈妈出于爱帮我收拾东西,并跟我先生和婆婆产生矛盾,妈妈觉得他们没有照顾好我…。今晚回家见到妈妈,我很欣赏她并赞扬她,妈妈说今晚要跟我睡我说好,当我们俩躺在床上准备睡觉的时候,我握着妈妈的手对她说:妈妈这几天辛苦你了,你看你多利害把我们的家收拾得</div>
                    </li>
                    <li><a href="/article/1835513803861749760.htm"
                           title="机器学习与深度学习间关系与区别" target="_blank">机器学习与深度学习间关系与区别</a>
                        <span class="text-muted">ℒℴѵℯ心·动ꦿ໊ོ꫞</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>一、机器学习概述定义机器学习(MachineLearning,ML)是一种通过数据驱动的方法,利用统计学和计算算法来训练模型,使计算机能够从数据中学习并自动进行预测或决策。机器学习通过分析大量数据样本,识别其中的模式和规律,从而对新的数据进行判断。其核心在于通过训练过程,让模型不断优化和提升其预测准确性。主要类型1.监督学习(SupervisedLearning)监督学习是指在训练数据集中包含输入</div>
                    </li>
                    <li><a href="/article/1835513701143244800.htm"
                           title="铭刻于星(四十二)" target="_blank">铭刻于星(四十二)</a>
                        <span class="text-muted">随风至</span>

                        <div>69夜晚,绍敏同学做完功课后,看了眼房外,没听到动静才敢从书包的夹层里拿出那个心形纸团。折痕压得很深,都有些旧了,想来是已经写好很久了。绍敏同学慢慢地、轻轻地捏开折叠处,待到全部拆开后,又反复抚平纸张,然后仔细地一字字默看。只是开头的三个字是第一次看到,让她心漏跳了几拍。“亲爱的绍敏:从四年级的时候,我就喜欢你了,但是我一直不敢说,怕影响你学习。六年级的时候听说有人跟你表白,你接受了,我很难过,但</div>
                    </li>
                    <li><a href="/article/1835513424734416896.htm"
                           title="UI学习——cell的复用和自定义cell" target="_blank">UI学习——cell的复用和自定义cell</a>
                        <span class="text-muted">Magnetic_h</span>
<a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>目录cell的复用手动(非注册)自动(注册)自定义cellcell的复用在iOS开发中,单元格复用是一种提高表格(UITableView)和集合视图(UICollectionView)滚动性能的技术。当一个UITableViewCell或UICollectionViewCell首次需要显示时,如果没有可复用的单元格,则视图会创建一个新的单元格。一旦这个单元格滚动出屏幕,它就不会被销毁。相反,它被添</div>
                    </li>
                    <li><a href="/article/1835511542284644352.htm"
                           title="学点心理知识,呵护孩子健康" target="_blank">学点心理知识,呵护孩子健康</a>
                        <span class="text-muted">静候花开_7090</span>

                        <div>昨天听了华中师范大学教育管理学系副教授张玲老师的《哪里才是学生心理健康的最后庇护所,超越教育与技术的思考》的讲座。今天又重新学习了一遍,收获匪浅。张玲博士也注意到了当今社会上的孩子由于心理问题导致的自残、自杀及伤害他人等恶性事件。她向我们普及了一个重要的命题,她说心理健康的一些基本命题,我们与我们通常的一些教育命题是不同的,她还举了几个例子,让我们明白我们原来以为的健康并非心理学上的健康。比如如果</div>
                    </li>
                    <li><a href="/article/1835508131032035328.htm"
                           title="ArcGIS栅格计算器常见公式(赋值、0和空值的转换、补充栅格空值)" target="_blank">ArcGIS栅格计算器常见公式(赋值、0和空值的转换、补充栅格空值)</a>
                        <span class="text-muted">研学随笔</span>
<a class="tag" taget="_blank" href="/search/arcgis/1.htm">arcgis</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a>
                        <div>我们在使用ArcGIS时通常经常用到栅格计算器,今天主要给大家介绍我日常中经常用到的几个公式,供大家参考学习。将特定值(-9999)赋值为0,例如-9999.Con("raster"==-9999,0,"raster")2.给空值赋予特定的值(如0)Con(IsNull("raster"),0,"raster")3.将特定的栅格值(如1)赋值为空值,其他保留原值SetNull("raster"==</div>
                    </li>
                    <li><a href="/article/1835507248395284480.htm"
                           title="【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数" target="_blank">【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数</a>
                        <span class="text-muted">广龙宇</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%B5%B7%E5%AD%A6Rust/1.htm">一起学Rust</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Rust%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">Rust设计模式</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分</div>
                    </li>
                    <li><a href="/article/1835506996258893824.htm"
                           title="回溯 Leetcode 332 重新安排行程" target="_blank">回溯 Leetcode 332 重新安排行程</a>
                        <span class="text-muted">mmaerd</span>
<a class="tag" taget="_blank" href="/search/Leetcode%E5%88%B7%E9%A2%98%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/1.htm">Leetcode刷题学习记录</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a>
                        <div>重新安排行程Leetcode332学习记录自代码随想录给你一份航线列表tickets,其中tickets[i]=[fromi,toi]表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从JFK开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。例如,行程[“JFK”,“LGA”]与[“JFK”,“LGB</div>
                    </li>
                    <li><a href="/article/1835506869838376960.htm"
                           title="Python数据分析与可视化实战指南" target="_blank">Python数据分析与可视化实战指南</a>
                        <span class="text-muted">William数据分析</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE/1.htm">数据</a>
                        <div>在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。一、环境准备1.1安装必要库在开始数据分析和可视化之前,我们需要安装一些常用的库。主要包括pandas、numpy、matplotlib和seaborn等。这些库分别用于数据处理、数学</div>
                    </li>
                    <li><a href="/article/1835504817905168384.htm"
                           title="2019-12-22-22:30" target="_blank">2019-12-22-22:30</a>
                        <span class="text-muted">涓涓1016</span>

                        <div>今天是冬至,写下我的日更,是因为这两天的学习真的是能量的满满,让我看到了自己,未来另外一种可能性,也让我看到了这两年这几年的过程中我所接受那些痛苦的来源。一切的根源和痛苦都来自于人生,家庭,而你的原生家庭,你的爸爸和妈妈,是因为你这个灵魂在那一刻选择他们作为你的爸爸和妈妈来的,所以你得接受他,你得接纳他,他就是因为他的存在而给你的学习和成长带来这些痛苦,那其实是你必然要经历的这个过程,当你去接纳的</div>
                    </li>
                    <li><a href="/article/1835502704827396096.htm"
                           title="将cmd中命令输出保存为txt文本文件" target="_blank">将cmd中命令输出保存为txt文本文件</a>
                        <span class="text-muted">落难Coder</span>
<a class="tag" taget="_blank" href="/search/Windows/1.htm">Windows</a><a class="tag" taget="_blank" href="/search/cmd/1.htm">cmd</a><a class="tag" taget="_blank" href="/search/window/1.htm">window</a>
                        <div>最近深度学习本地的训练中我们常常要在命令行中运行自己的代码,无可厚非,我们有必要保存我们的炼丹结果,但是复制命令行输出到txt是非常麻烦的,其实Windows下的命令行为我们提供了相应的操作。其基本的调用格式就是:运行指令>输出到的文件名称或者具体保存路径测试下,我打开cmd并且ping一下百度:pingwww.baidu.com>./data.txt看下相同目录下data.txt的输出:如果你再</div>
                    </li>
                    <li><a href="/article/1835499615491813376.htm"
                           title="四章-32-点要素的聚合" target="_blank">四章-32-点要素的聚合</a>
                        <span class="text-muted">彩云飘过</span>

                        <div>本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers5.3.xapi。源码见1032.html,对应的官网示例https://openlayers.org/en/latest/examples/cluster.htmlhttps://openlayers.org/en/latest/examples/earthquake-clusters.</div>
                    </li>
                    <li><a href="/article/1835496402042580992.htm"
                           title="GitHub上克隆项目" target="_blank">GitHub上克隆项目</a>
                        <span class="text-muted">bigbig猩猩</span>
<a class="tag" taget="_blank" href="/search/github/1.htm">github</a>
                        <div>从GitHub上克隆项目是一个简单且直接的过程,它允许你将远程仓库中的项目复制到你的本地计算机上,以便进行进一步的开发、测试或学习。以下是一个详细的步骤指南,帮助你从GitHub上克隆项目。一、准备工作1.安装Git在克隆GitHub项目之前,你需要在你的计算机上安装Git工具。Git是一个开源的分布式版本控制系统,用于跟踪和管理代码变更。你可以从Git的官方网站(https://git-scm.</div>
                    </li>
                    <li><a href="/article/1835496148601761792.htm"
                           title="HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动" target="_blank">HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动</a>
                        <span class="text-muted">二挡起步</span>
<a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web前端期末大作业</a><a class="tag" taget="_blank" href="/search/web%E8%AE%BE%E8%AE%A1%E7%BD%91%E9%A1%B5%E8%A7%84%E5%88%92%E4%B8%8E%E8%AE%BE%E8%AE%A1/1.htm">web设计网页规划与设计</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/dreamweaver/1.htm">dreamweaver</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线</div>
                    </li>
                    <li><a href="/article/1835495644123459584.htm"
                           title="Day1笔记-Python简介&标识符和关键字&输入输出" target="_blank">Day1笔记-Python简介&标识符和关键字&输入输出</a>
                        <span class="text-muted">~在杰难逃~</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a>
                        <div>大家好,从今天开始呢,杰哥开展一个新的专栏,当然,数据分析部分也会不定时更新的,这个新的专栏主要是讲解一些Python的基础语法和知识,帮助0基础的小伙伴入门和学习Python,感兴趣的小伙伴可以开始认真学习啦!一、Python简介【了解】1.计算机工作原理编程语言就是用来定义计算机程序的形式语言。我们通过编程语言来编写程序代码,再通过语言处理程序执行向计算机发送指令,让计算机完成对应的工作,编程</div>
                    </li>
                    <li><a href="/article/1835494131535802368.htm"
                           title="人工智能时代,程序员如何保持核心竞争力?" target="_blank">人工智能时代,程序员如何保持核心竞争力?</a>
                        <span class="text-muted">jmoych</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>随着AIGC(如chatgpt、midjourney、claude等)大语言模型接二连三的涌现,AI辅助编程工具日益普及,程序员的工作方式正在发生深刻变革。有人担心AI可能取代部分编程工作,也有人认为AI是提高效率的得力助手。面对这一趋势,程序员应该如何应对?是专注于某个领域深耕细作,还是广泛学习以适应快速变化的技术环境?又或者,我们是否应该将重点转向AI无法轻易替代的软技能?让我们一起探讨程序员</div>
                    </li>
                    <li><a href="/article/1835492740536823808.htm"
                           title="node.js学习" target="_blank">node.js学习</a>
                        <span class="text-muted">小猿L</span>
<a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a>
                        <div>node.js学习实操及笔记温故node.js,node.js学习实操过程及笔记~node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记为什么学node.js可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vuereactangular离不开node.jsnode.js是什么官网:node.js是一个开源的、跨平台的运行JavaScript的运行</div>
                    </li>
                    <li><a href="/article/1835492372952215552.htm"
                           title="阶段总结反思" target="_blank">阶段总结反思</a>
                        <span class="text-muted">轻争</span>

                        <div>马上就要进入10月份了,今天做一下前段时间的总结和反思。前段时间,日更、英语、健身、护肤坚持的比较好。阅读、书法坚持的不好。1.中间被迫停更半个多月,其余时间一直在坚持日更挑战。偶尔也有不想写的时候,就做一下摘抄。因为阅读(输入)没跟上来,所以写作(输出)质量有待进一步加强。2.英语做到了一周至少学习5天,每次不少于30分钟,但是小班课没有跟上更新速度,下一步要争取利用零碎时间补听小班课。3.减肥</div>
                    </li>
                    <li><a href="/article/1835489587498151936.htm"
                           title="ARM驱动学习之基础小知识" target="_blank">ARM驱动学习之基础小知识</a>
                        <span class="text-muted">JT灬新一</span>
<a class="tag" taget="_blank" href="/search/ARM/1.htm">ARM</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>ARM驱动学习之基础小知识•sch原理图工程师工作内容–方案–元器件选型–采购(能不能买到,价格)–原理图(涉及到稳定性)•layout画板工程师–layout(封装、布局,布线,log)(涉及到稳定性)–焊接的一部分工作(调试阶段板子的焊接)•驱动工程师–驱动,原理图,layout三部分的交集容易发生矛盾•PCB研发流程介绍–方案,原理图(网表)–layout工程师(gerber文件)–PCB板</div>
                    </li>
                    <li><a href="/article/1835489588169240576.htm"
                           title="ARM驱动学习之5 LEDS驱动" target="_blank">ARM驱动学习之5 LEDS驱动</a>
                        <span class="text-muted">JT灬新一</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/C/1.htm">C</a><a class="tag" taget="_blank" href="/search/%E5%BA%95%E5%B1%82/1.htm">底层</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a>
                        <div>ARM驱动学习之5LEDS驱动知识点:•linuxGPIO申请函数和赋值函数–gpio_request–gpio_set_value•三星平台配置GPIO函数–s3c_gpio_cfgpin•GPIO配置输出模式的宏变量–S3C_GPIO_OUTPUT注意点:DRIVER_NAME和DEVICE_NAME匹配。实现步骤:1.加入需要的头文件://Linux平台的gpio头文件#include//三</div>
                    </li>
                    <li><a href="/article/1835489586684456960.htm"
                           title="ARM驱动学习之4小结" target="_blank">ARM驱动学习之4小结</a>
                        <span class="text-muted">JT灬新一</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>ARM驱动学习之4小结#include#include#include#include#include#defineDEVICE_NAME"hello_ctl123"MODULE_LICENSE("DualBSD/GPL");MODULE_AUTHOR("TOPEET");staticlonghello_ioctl(structfile*file,unsignedintcmd,unsignedlo</div>
                    </li>
                    <li><a href="/article/1835489566702792704.htm"
                           title="展现思维导图魅力,不断挖掘人生宝藏" target="_blank">展现思维导图魅力,不断挖掘人生宝藏</a>
                        <span class="text-muted">思维导图讲师Mandy</span>

                        <div>第13期最强思维导图训练营已经结束一周了,但是我依旧是感觉所有学员还在努力的学习,这些学员中有教师、学生、白领、公务员、宝妈等等,只要你努力,只要你想改变自己,任何行业,任何岗位都可以参与进来,28天足以让你见成效,在这28天中,我们的学员不仅仅是收获了一枚毕业证,最重要的是让自己的思维方式得到升级,今天的你为自己投资,明天的你就会感谢你今天的付出,我们来听一听来自13期最强思维导图训练营优秀学员</div>
                    </li>
                    <li><a href="/article/1835488930972135424.htm"
                           title="2019-3-23晨间日记" target="_blank">2019-3-23晨间日记</a>
                        <span class="text-muted">红红火火小耳朵</span>

                        <div>今天是什么日子起床:7点40就寝:23点半天气:有太阳,不过一会儿出来一会儿进去特别清爽的凉意,还蛮舒服的心情:小激动要给女朋友过生日啦纪念日:田田女士过生日任务清单昨日完成的任务,最重要的三件事:1.英语一对一2.运动计划3.认真护肤习惯养成:调整状态周目标·完成进度英语七天打卡(5/7)轻课阅读(87/180)音标课(25/30)读书(福尔摩斯一章)学习·信息·阅读#英语课#Cookingte</div>
                    </li>
                    <li><a href="/article/1835485681187647488.htm"
                           title="【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面" target="_blank">【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面</a>
                        <span class="text-muted">一个射手座的程序媛</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a>
                        <div>最后的话最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!资料预览给大家整理的视频资料:给大家整理的电子书资料:如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以点击这里获</div>
                    </li>
                    <li><a href="/article/1835483983241113600.htm"
                           title="教育" target="_blank">教育</a>
                        <span class="text-muted">用心灵温暖心灵</span>

                        <div>@陈春丽长期学习班冯倩。今天一早就听到说高职合并,取消中专教育的教育信息。感觉是虽然知道,再听还是吓一跳。国家重视职业教育为何还要取消中专技术学校的教育?再听高中就要进行技术教育了,一部分人学习好继续努力学习考大学,一部分人在高中就可以进行职业教育接受职业教育了还要中专技术教育学校干什么呢!a有些职业教育学校转型升级快,不是孩子上完给找工作,而是学校帮孩子创业,我觉得是不错的方向!新闻新你得实时更</div>
                    </li>
                    <li><a href="/article/1835483730358136832.htm"
                           title="数字里的世界17期:2021年全球10大顶级数据中心,中国移动榜首" target="_blank">数字里的世界17期:2021年全球10大顶级数据中心,中国移动榜首</a>
                        <span class="text-muted">张三叨</span>

                        <div>你知道吗?2016年,全球的数据中心共计用电4160亿千瓦时,比整个英国的发电量还多40%!前言每天,我们都会创造超过250万TB的数据。并且随着物联网(IOT)的不断普及,这一数据将持续增长。如此庞大的数据被存储在被称为“数据中心”的专用设施中。虽然最早的数据中心建于20世纪40年代,但直到1997-2000年的互联网泡沫期间才逐渐成为主流。当前人类的技术,比如人工智能和机器学习,已经将我们推向</div>
                    </li>
                    <li><a href="/article/1835483474883080192.htm"
                           title="学习“论语”-第59天" target="_blank">学习“论语”-第59天</a>
                        <span class="text-muted">春峰轩</span>

                        <div>12.14子张问政。子曰:“居之无倦,行之以忠。”子张问为政之道。孔子说:“在位尽职不懈怠,执行政令要忠诚。”12.15子曰:“博学于文,约之以礼,亦可以弗畔矣夫!”孔子说:“君子广泛地学习文献,并且用礼节约束自己,也就不会离经叛道了。”12.16子曰:“君子成人之美,不成人之恶。小人反是。”孔子说:“君子成全别人的好事,而不助长别人的坏处。小人则与此相反行事。”知识点:“成人之美,不成人之恶”贯</div>
                    </li>
                    <li><a href="/article/1835483159630802944.htm"
                           title="nosql数据库技术与应用知识点" target="_blank">nosql数据库技术与应用知识点</a>
                        <span class="text-muted">皆过客,揽星河</span>
<a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a><a class="tag" taget="_blank" href="/search/nosql/1.htm">nosql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E9%9D%9E%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">非关系型数据库</a>
                        <div>Nosql知识回顾大数据处理流程数据采集(flume、爬虫、传感器)数据存储(本门课程NoSQL所处的阶段)Hdfs、MongoDB、HBase等数据清洗(入仓)Hive等数据处理、分析(Spark、Flink等)数据可视化数据挖掘、机器学习应用(Python、SparkMLlib等)大数据时代存储的挑战(三高)高并发(同一时间很多人访问)高扩展(要求随时根据需求扩展存储)高效率(要求读写速度快)</div>
                    </li>
                    <li><a href="/article/1835481269690003456.htm"
                           title="《Python数据分析实战终极指南》" target="_blank">《Python数据分析实战终极指南》</a>
                        <span class="text-muted">xjt921122</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>对于分析师来说,大家在学习Python数据分析的路上,多多少少都遇到过很多大坑**,有关于技能和思维的**:Excel已经没办法处理现有的数据量了,应该学Python吗?找了一大堆Python和Pandas的资料来学习,为什么自己动手就懵了?跟着比赛类公开数据分析案例练了很久,为什么当自己面对数据需求还是只会数据处理而没有分析思路?学了对比、细分、聚类分析,也会用PEST、波特五力这类分析法,为啥</div>
                    </li>
                    <li><a href="/article/1835480678255390720.htm"
                           title="2019-01-19" target="_blank">2019-01-19</a>
                        <span class="text-muted">王小康KK</span>

                        <div>姓名:王康公司:扬州市方圆建筑工程有限公司2018年3月16日~3月18日上海361期《六项精进》感谢二组学员【日精进打卡第307天】【知~学习】《六项精进》大纲3遍共862遍《大学》通篇3遍共860遍《六项精进》全书40页【经典名句】思想决定行为,行为决定习惯,习惯决定性格,性格决定命运。【行~实践】一、修身:(对自己个人)1、践行六项精进的理念。二、齐家:(对家庭和家人)1、和女朋友视频聊天。</div>
                    </li>
                                <li><a href="/article/3.htm"
                                       title="枚举的构造函数中抛出异常会怎样" target="_blank">枚举的构造函数中抛出异常会怎样</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a>
                                    <div>首先从使用enum实现单例说起。 
 
为什么要用enum来实现单例? 
这篇文章( 
http://javarevisited.blogspot.sg/2012/07/why-enum-singleton-are-better-in-java.html)阐述了三个理由: 
1.enum单例简单、容易,只需几行代码: 
 

public enum Singleton {
	INSTANCE;</div>
                                </li>
                                <li><a href="/article/130.htm"
                                       title="CMake 教程" target="_blank">CMake 教程</a>
                                    <span class="text-muted">aigo</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a>
                                    <div>转自:http://xiang.lf.blog.163.com/blog/static/127733322201481114456136/ 
  
CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多。 
介绍:http://baike.baidu.com/view/1126160.htm 
本文件不介绍CMake的基本语法,下面是篇不错的入门教程: 
http:</div>
                                </li>
                                <li><a href="/article/257.htm"
                                       title="cvc-complex-type.2.3: Element 'beans' cannot have character" target="_blank">cvc-complex-type.2.3: Element 'beans' cannot have character</a>
                                    <span class="text-muted">Cb123456</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Webgis/1.htm">Webgis</a>
                                    <div>  cvc-complex-type.2.3: Element 'beans' cannot have character 
    Line 33 in XML document from ServletContext resource [/WEB-INF/backend-servlet.xml] is i</div>
                                </li>
                                <li><a href="/article/384.htm"
                                       title="jquery实例:随页面滚动条滚动而自动加载内容" target="_blank">jquery实例:随页面滚动条滚动而自动加载内容</a>
                                    <span class="text-muted">120153216</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a>
                                    <div><script language="javascript">
$(function (){
	var i = 4;$(window).bind("scroll", function (event){
		//滚动条到网页头部的 高度,兼容ie,ff,chrome
		var top = document.documentElement.s</div>
                                </li>
                                <li><a href="/article/511.htm"
                                       title="将数据库中的数据转换成dbs文件" target="_blank">将数据库中的数据转换成dbs文件</a>
                                    <span class="text-muted">何必如此</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/dbs/1.htm">dbs</a>
                                    <div>旗正规则引擎通过数据库配置器(DataBuilder)来管理数据库,无论是Oracle,还是其他主流的数据都支持,操作方式是一样的。旗正规则引擎的数据库配置器是用于编辑数据库结构信息以及管理数据库表数据,并且可以执行SQL 语句,主要功能如下。 
1)数据库生成表结构信息: 
        主要生成数据库配置文件(.conf文</div>
                                </li>
                                <li><a href="/article/638.htm"
                                       title="在IBATIS中配置SQL语句的IN方式" target="_blank">在IBATIS中配置SQL语句的IN方式</a>
                                    <span class="text-muted">357029540</span>
<a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a>
                                    <div>在使用IBATIS进行SQL语句配置查询时,我们一定会遇到通过IN查询的地方,在使用IN查询时我们可以有两种方式进行配置参数:String和List。具体使用方式如下: 
 
1.String:定义一个String的参数userIds,把这个参数传入IBATIS的sql配置文件,sql语句就可以这样写: 
 
 
 
<select id="getForms" param</div>
                                </li>
                                <li><a href="/article/765.htm"
                                       title="Spring3 MVC 笔记(一)" target="_blank">Spring3 MVC 笔记(一)</a>
                                    <span class="text-muted">7454103</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/JSF/1.htm">JSF</a>
                                    <div>    
     自从 MVC 这个概念提出来之后 struts1.X  struts2.X   jsf 。。。。。 
这个view 层的技术一个接一个! 都用过!不敢说哪个绝对的强悍! 
要看业务,和整体的设计! 
 
     最近公司要求开发个新系统!</div>
                                </li>
                                <li><a href="/article/892.htm"
                                       title="Timer与Spring Quartz 定时执行程序" target="_blank">Timer与Spring Quartz 定时执行程序</a>
                                    <span class="text-muted">darkranger</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a>
                                    <div>有时候需要定时触发某一项任务。其实在jdk1.3,java sdk就通过java.util.Timer提供相应的功能。一个简单的例子说明如何使用,很简单: 1、第一步,我们需要建立一项任务,我们的任务需要继承java.util.TimerTask package com.test; import java.text.SimpleDateFormat; import java.util.Date; </div>
                                </li>
                                <li><a href="/article/1019.htm"
                                       title="大端小端转换,le32_to_cpu 和cpu_to_le32" target="_blank">大端小端转换,le32_to_cpu 和cpu_to_le32</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80%E7%9B%B8%E5%85%B3/1.htm">C语言相关</a>
                                    <div>大端小端转换,le32_to_cpu 和cpu_to_le32   字节序  
http://oss.org.cn/kernel-book/ldd3/ch11s04.html 
        小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台以另一种方式(大端)</div>
                                </li>
                                <li><a href="/article/1146.htm"
                                       title="Nginx负载均衡配置实例详解" target="_blank">Nginx负载均衡配置实例详解</a>
                                    <span class="text-muted">avords</span>

                                    <div>[导读] 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。负载均衡先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解  负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。 
负载均衡 
先来简单了解一下什么是负载均衡</div>
                                </li>
                                <li><a href="/article/1273.htm"
                                       title="乱说的" target="_blank">乱说的</a>
                                    <span class="text-muted">houxinyou</span>
<a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91/1.htm">敏捷开发</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a>
                                    <div>从很久以前,大家就研究框架,开发方法,软件工程,好多!反正我是搞不明白!   
这两天看好多人研究敏捷模型,瀑布模型!也没太搞明白.    
不过感觉和程序开发语言差不多,   
瀑布就是顺序,敏捷就是循环.    
瀑布就是需求、分析、设计、编码、测试一步一步走下来。而敏捷就是按摸块或者说迭代做个循环,第个循环中也一样是需求、分析、设计、编码、测试一步一步走下来。   
  
也可以把软件开发理</div>
                                </li>
                                <li><a href="/article/1400.htm"
                                       title="欣赏的价值——一个小故事" target="_blank">欣赏的价值——一个小故事</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%89%E6%95%88%E8%BE%85%E5%AF%BC/1.htm">有效辅导</a><a class="tag" taget="_blank" href="/search/%E6%AC%A3%E8%B5%8F/1.htm">欣赏</a><a class="tag" taget="_blank" href="/search/%E6%AC%A3%E8%B5%8F%E7%9A%84%E4%BB%B7%E5%80%BC/1.htm">欣赏的价值</a>
                                    <div>  第一次参加家长会,幼儿园的老师说:"您的儿子有多动症,在板凳上连三分钟都坐不了,你最好带他去医院看一看。"  回家的路上,儿子问她老师都说了些什么,她鼻子一酸,差点流下泪来。因为全班30位小朋友,惟有他表现最差;惟有对他,老师表现出不屑,然而她还在告诉她的儿子:"老师表扬你了,说宝宝原来在板凳上坐不了一分钟,现在能坐三分钟。其他妈妈都非常羡慕妈妈,因为全班只有宝宝</div>
                                </li>
                                <li><a href="/article/1527.htm"
                                       title="包冲突问题的解决方法" target="_blank">包冲突问题的解决方法</a>
                                    <span class="text-muted">bingyingao</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/exclusions/1.htm">exclusions</a><a class="tag" taget="_blank" href="/search/%E5%8C%85%E5%86%B2%E7%AA%81/1.htm">包冲突</a>
                                    <div>包冲突是开发过程中很常见的问题: 
其表现有: 
1.明明在eclipse中能够索引到某个类,运行时却报出找不到类。 
2.明明在eclipse中能够索引到某个类的方法,运行时却报出找不到方法。 
3.类及方法都有,以正确编译成了.class文件,在本机跑的好好的,发到测试或者正式环境就 
抛如下异常: 
 
java.lang.NoClassDefFoundError: Could not in</div>
                                </li>
                                <li><a href="/article/1654.htm"
                                       title="【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j" target="_blank">【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Stream/1.htm">Stream</a>
                                    <div>先来一段废话: 
实际工作中,业务系统的日志基本上是使用Log4j写入到日志文件中的,问题的关键之处在于业务日志的格式混乱,这给对日志文件中的日志进行统计分析带来了极大的困难,或者说,基本上无法进行分析,每个人写日志的习惯不同,导致日志行的格式五花八门,最后只能通过grep来查找特定的关键词缩小范围,但是在集群环境下,每个机器去grep一遍,分析一遍,这个效率如何可想之二,大好光阴都浪费在这上面了</div>
                                </li>
                                <li><a href="/article/1781.htm"
                                       title="sudoku solver in Haskell" target="_blank">sudoku solver in Haskell</a>
                                    <span class="text-muted">bookjovi</span>
<a class="tag" taget="_blank" href="/search/sudoku/1.htm">sudoku</a><a class="tag" taget="_blank" href="/search/haskell/1.htm">haskell</a>
                                    <div>这几天没太多的事做,想着用函数式语言来写点实用的程序,像fib和prime之类的就不想提了(就一行代码的事),写什么程序呢?在网上闲逛时发现sudoku游戏,sudoku十几年前就知道了,学生生涯时也想过用C/Java来实现个智能求解,但到最后往往没写成,主要是用C/Java写的话会很麻烦。 
  
现在写程序,本人总是有一种思维惯性,总是想把程序写的更紧凑,更精致,代码行数最少,所以现</div>
                                </li>
                                <li><a href="/article/1908.htm"
                                       title="java apache ftpClient" target="_blank">java apache ftpClient</a>
                                    <span class="text-muted">bro_feng</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>最近使用apache的ftpclient插件实现ftp下载,遇见几个问题,做如下总结。 
1. 上传阻塞,一连串的上传,其中一个就阻塞了,或是用storeFile上传时返回false。查了点资料,说是FTP有主动模式和被动模式。将传出模式修改为被动模式ftp.enterLocalPassiveMode();然后就好了。 
 
看了网上相关介绍,对主动模式和被动模式区别还是比较的模糊,不太了解被动模</div>
                                </li>
                                <li><a href="/article/2035.htm"
                                       title="读《研磨设计模式》-代码笔记-工厂方法模式" target="_blank">读《研磨设计模式》-代码笔记-工厂方法模式</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ 
 
 
 
 


package design.pattern;

/*
 * 工厂方法模式:使一个类的实例化延迟到子类
 * 某次,我在工作不知不觉中就用到了工厂方法模式(称为模板方法模式更恰当。2012-10-29):
 * 有很多不同的产品,它</div>
                                </li>
                                <li><a href="/article/2162.htm"
                                       title="面试记录语" target="_blank">面试记录语</a>
                                    <span class="text-muted">chenyu19891124</span>
<a class="tag" taget="_blank" href="/search/%E6%8B%9B%E8%81%98/1.htm">招聘</a>
                                    <div>或许真的在一个平台上成长成什么样,都必须靠自己去努力。有了好的平台让自己展示,就该好好努力。今天是自己单独一次去面试别人,感觉有点小紧张,说话有点打结。在面试完后写面试情况表,下笔真的好难,尤其是要对面试人的情况说明真的好难。 
今天面试的是自己同事的同事,现在的这个同事要离职了,介绍了我现在这位同事以前的同事来面试。今天这位求职者面试的是配置管理,期初看了简历觉得应该很适合做配置管理,但是今天面</div>
                                </li>
                                <li><a href="/article/2289.htm"
                                       title="Fire Workflow 1.0正式版终于发布了" target="_blank">Fire Workflow 1.0正式版终于发布了</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/workflow/1.htm">workflow</a><a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a>
                                    <div>Fire Workflow 是国内另外一款开源工作流,作者是著名的非也同志,哈哈.... 
 官方网站是 http://www.fireflow.org 
 
 经过大家努力,Fire Workflow 1.0正式版终于发布了 
 
 正式版主要变化: 
1、增加IWorkItem.jumpToEx(...)方法,取消了当前环节和目标环节必须在同一条执行线的限制,使得自由流更加自由 
2、增加IT</div>
                                </li>
                                <li><a href="/article/2416.htm"
                                       title="Python向脚本传参" target="_blank">Python向脚本传参</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a><a class="tag" taget="_blank" href="/search/%E4%BC%A0%E5%8F%82/1.htm">传参</a>
                                    <div>如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢? 
需要模块:sys 
参数个数:len(sys.argv) 
脚本名:    sys.argv[0] 
参数1:     sys.argv[1] 
参数2:     sys.argv[</div>
                                </li>
                                <li><a href="/article/2543.htm"
                                       title="管理用户分组的命令gpasswd" target="_blank">管理用户分组的命令gpasswd</a>
                                    <span class="text-muted">dongwei_6688</span>
<a class="tag" taget="_blank" href="/search/passwd/1.htm">passwd</a>
                                    <div>NAME:  gpasswd - administer the /etc/group file 
SYNOPSIS: 
 gpasswd group 
 gpasswd -a user group 
 gpasswd -d user group 
 gpasswd -R group 
 gpasswd -r group 
 gpasswd [-A user,...] [-M user,...] g</div>
                                </li>
                                <li><a href="/article/2670.htm"
                                       title="郝斌老师数据结构课程笔记" target="_blank">郝斌老师数据结构课程笔记</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">数据结构与算法</a>
                                    <div><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</div>
                                </li>
                                <li><a href="/article/2797.htm"
                                       title="yii2 cgridview加上选择框进行操作" target="_blank">yii2 cgridview加上选择框进行操作</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/GridView/1.htm">GridView</a>
                                    <div>页面代码
<?=Html::beginForm(['controller/bulk'],'post');?>
<?=Html::dropDownList('action','',[''=>'Mark selected as: ','c'=>'Confirmed','nc'=>'No Confirmed'],['class'=>'dropdown',])</div>
                                </li>
                                <li><a href="/article/2924.htm"
                                       title="linux mysql" target="_blank">linux mysql</a>
                                    <span class="text-muted">fypop</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>enquiry mysql version in centos linux 
yum list installed | grep mysql 
yum -y remove mysql-libs.x86_64 
enquiry mysql version in yum repositoryyum list | grep mysql oryum -y list mysql* 
install mysq</div>
                                </li>
                                <li><a href="/article/3051.htm"
                                       title="Scramble String" target="_blank">Scramble String</a>
                                    <span class="text-muted">hcx2013</span>
<a class="tag" taget="_blank" href="/search/String/1.htm">String</a>
                                    <div>Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively. 
Below is one possible representation of s1 = "great":</div>
                                </li>
                                <li><a href="/article/3178.htm"
                                       title="跟我学Shiro目录贴" target="_blank">跟我学Shiro目录贴</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/%E8%B7%9F%E6%88%91%E5%AD%A6shiro/1.htm">跟我学shiro</a>
                                    <div>历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有需要补充的内容,因此生成PDF版供大家下载。最近项目比较紧,没有时间解答一些疑问,暂时无法回复一些问题,很抱歉,不过可以加群(334194438/348194195)一起讨论问题。 
  
  
----广告-----------------------------------------------------</div>
                                </li>
                                <li><a href="/article/3305.htm"
                                       title="nginx日志切割并使用flume-ng收集日志" target="_blank">nginx日志切割并使用flume-ng收集日志</a>
                                    <span class="text-muted">liyonghui160com</span>

                                    <div>  
   nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。第二步向nginx主</div>
                                </li>
                                <li><a href="/article/3432.htm"
                                       title="Oracle死锁解决方法" target="_blank">Oracle死锁解决方法</a>
                                    <span class="text-muted">pda158</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div> select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.</div>
                                </li>
                                <li><a href="/article/3559.htm"
                                       title="java之List排序" target="_blank">java之List排序</a>
                                    <span class="text-muted">shiguanghui</span>
<a class="tag" taget="_blank" href="/search/list%E6%8E%92%E5%BA%8F/1.htm">list排序</a>
                                    <div>   在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。   你能够使用java.util.Collections类中的sort()方法对List元素进行排序。你既可以给方法传递</div>
                                </li>
                                <li><a href="/article/3686.htm"
                                       title="servlet单例多线程" target="_blank">servlet单例多线程</a>
                                    <span class="text-muted">utopialxw</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a>
                                    <div>转自http://www.cnblogs.com/yjhrem/articles/3160864.html 
和   http://blog.chinaunix.net/uid-7374279-id-3687149.html 
Servlet 单例多线程 
Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>