# encoding=utf-8
'''
selenium 全天 二 ''' #unittest例子 from selenium import webdriver
import unittest,time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains class VisitSogouBaiduByChrome(unittest.TestCase): def setUp(self):
self.driver = webdriver.Chrome(executable_path='f:\\chromedriver')
self.url1= 'https://www.baidu.com'
self.url2 = 'https://cn.bing.com'
self.wwait=WebDriverWait(self.driver,10,0.4) def test_visit_baidu(self):
self.driver.get(self.url1)
print('当前网页为:', self.driver.current_url)
self.wwait.until(lambda x:x.find_element_by_id('kw')).send_keys('我是谁')
self.wwait.until(lambda x:x.find_element_by_id('su')).click()
time.sleep(3) assert '成龙' in self.driver.page_source def test_visit_bing(self):
self.driver.get(self.url2)
print('当前网页为:', self.driver.current_url)
self.wwait.until(lambda x:x.find_element_by_id('sb_form_q')).send_keys('猫鼠游戏')
self.wwait.until(lambda x:x.find_element_by_id('sb_form_go')).click()
time.sleep(3) assert '莱昂纳多' in self.driver.page_source def tearDown(self):
self.driver.quit() if __name__=='__main__':
unittest.main() '''
#执行的顺序:
set_up #每个test的初始化
test_visitsogou #方法名称必须test开头
teardown
set_up
test_visitbaidu
teardown #每个test的结束执行
''' ************************selenium API 基本操作 ************************* #页面后退、前进 driver.back()
driver.forward() #页面刷新
driver.refresh() #强制刷新 不使用浏览器的缓存 #页面最大化
driver.maximize_window() #获取、设置窗口的坐标 左上角 0,0 往右+100 往下+200
driver.get_window_position() #设置窗口大小self.driver.get_window_size()、self.driver.set_window_size()
driver.get_window_size()
driver.set_window_size(width = 200, height = 400, windowHandle='current')
driver.get_window_size(windowHandle='current') #窗口的名称
driver.title #获取到网页的源码,比http协议requests获取的源码全,js都可以执行后获取
driver.page_source #获取当前页面的url
driver.current_url ********************************切换不同窗口 window_handles,driver.switch_to.window(now_handle)******************** import unittest
import time
import chardet
from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self):
# 启动IE浏览器
self.driver = webdriver.Chrome(executable_path="f:\\chromedriver") def test_operateWindowHandle(self):
url = "https://www.baidu.com"
self.driver.get(url) # 获取当前窗口句柄
now_handle = self.driver.current_window_handle # 百度搜索输入框中输入“w3cschool”
self.driver.find_element_by_id("kw").send_keys("w3cschool")
# 点击搜索按钮
self.driver.find_element_by_id("su").click()
time.sleep(3) # 点击w3school在线教育链接
self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click()
time.sleep(5)
print("++++", self.driver.window_handles) # 循环遍历所有新打开的窗口句柄,也就是说不包括主窗口
for handle in self.driver.window_handles:
if handle != now_handle:
# 切换窗口
self.driver.switch_to.window(handle) #切换窗口,也可以用下面的方法,但此种方法在selenium3.x以后官方已经不推荐使用了self.driver.switch_to_window(handle)
# 点击HTML5链接
self.driver.find_element_by_link_text('HTML5').click()
time.sleep(3)
# 关闭当前的窗口
self.driver.close() # 不能用self.driver.quit() 否则整个浏览器会退出
time.sleep(3)
# 返回主窗口
self.driver.switch_to.window(now_handle) time.sleep(2)
self.driver.find_element_by_id("kw").clear()
self.driver.find_element_by_id("kw").send_keys(u"光荣之路自动化测试培训")
self.driver.find_element_by_id("su").click()
time.sleep(5) def tearDown(self):
# 退出浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main() **********************************另一种方式切换不同的窗口,window_handles,判断driver.title==""********************** import unittest
import time
from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self):
# 启动chrome浏览器
self.driver = webdriver.Chrome(executable_path="f:\\chromedriver") def test_operateWindowHandle(self):
url = "http://www.baidu.com"
self.driver.get(url)
# 获取当前窗口句柄
now_handle = self.driver.current_window_handle # 百度搜索输入框中输入“w3cschool”
self.driver.find_element_by_id("kw").send_keys("w3cschool")
# 点击搜索按钮
self.driver.find_element_by_id("su").click()
time.sleep(3)
# 点击w3school在线教育链接
self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click() time.sleep(5)
# 获取所有窗口句柄
all_handles = self.driver.window_handles
# 循环遍历所有新打开的窗口句柄,也就是说不包括主窗口
for handle in all_handles:
self.driver.switch_to.window(handle) if self.driver.title == "w3school 在线教程":
# 点击HTML5链接
self.driver.find_element_by_link_text('HTML5').click()
time.sleep(3)
if self.driver.title == "w3cschool_百度搜索":
time.sleep(2)
self.driver.find_element_by_id("kw").clear()
self.driver.find_element_by_id("kw").send_keys("我是谁")
self.driver.find_element_by_id("su").click()
time.sleep(5) def tearDown(self):
# 退出IE浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main() ******************************组合按键keyDown(keyName)、keyUp(keyName)********************* import win32api
import win32con
import time VK_CODE ={
'enter':0x0D,
'ctrl':0x11,
'a':0x41,
'v':0x56,
'x':0x58,
't':0x54
} #键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
#键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0) #(方法1)浏览器新开一个窗口 ctrl+t
keyDown('ctrl')
keyDown('t')
keyUp('t')
keyUp('ctrl') #(方法2) 浏览器新开一个窗口
open_window='window.open("http://www.baidu.com");' #新开一个空白窗口 open_window='window.open();'
driver.execute_script(open_window) #获取元素的属性
news_element=driver.find_element_by_xpath("//*[text()='新闻']")
print("元素的标签名:", newsElement.tag_name)
print("元素的size:", newsElement.size)
print("元素的文本:",newsElement.text)
print("元素的链接:",newsElement.get_attribute("href"))
print("元素的链接:", newsElement.get_property("href")) #判断元素是否可见 div2.is_displayed() #判断元素是否可操作,及通过 js 修改元素可操作 input1.is_enabled()
driver.execute_script("document.getElementById('input2').disabled=false;") #获取页面文本框输入的内容
input_box=driver.find_element_by_id("kw")
input_box.send_keys("w3cschool")
print(input_box.get_attribute('value')) #获取页面元素的css的属性值 searchBox =driver.find_element_by_id("kw")
# 使用页面元素对象的value_of_css_property()方法获取元素的CSS属性值
print (u"搜索输入框的高度是:", searchBox.value_of_css_property("height"))
print (u"搜索输入框的宽度是:", searchBox.value_of_css_property("width"))
font = searchBox.value_of_css_property("font-family")
print (u"搜索输入框的字体是:", font)
# 断言搜索输入框的字体是否是arial字体
assert font=="arial" #文本框清空 input_box.clear() #页面元素双击 from selenium.webdriver import ActionChains
ActionChains(driver).double_click(inputBox).perform() #操作下拉框(普通方式) select = self.driver.find_element_by_name("fruit")
all_options = select.find_elements_by_tag_name("option") #注意这个返回列表
for option in all_options:
print (u"选项显示的文本:", option.text)
print (u"选项值为:", option.get_attribute("value"))
option.click() *************************Select方式操作下拉框************************* from selenium.webdriver.support.ui import Select select_element = Select(self.driver.find_element_by_xpath("//select"))
# 打印默认选中项的文本
print (select_element.first_selected_option.text)
#下拉框的所有选项
all_options = select_element.options #下拉框已选择的所有选项
select_element.all_selected_options #选择选项的三种方式
#通过序号
select_element.select_by_index(1)
#通过选项的显示文本
select_element.select_by_visible_text("猕猴桃")
#通过选项的value属性值
select_element.select_by_value("shanzha") #多选框的操作同上面下拉框 # 取消所有已选中项
select_element.deselect_all() select_element.select_by_index(1)
select_element.select_by_visible_text("荔枝")
select_element.select_by_value("juzi") # 通过选项文本取消已选中的文本为“荔枝”选项
select_element.deselect_by_visible_text("荔枝")
# 通过序号取消已选中的序号为1的选项
select_element.deselect_by_index(1)
# 通过选项的value属性值取消已选中的value=“juzi”的选项
select_element.deselect_by_value("juzi") #可以输入内容筛选的下拉框,选择提示的下拉内容,只支持IE
from selenium.webdriver.common.keys import Keys driver.find_element_by_id("select").send_keys("c") #根据输入,下拉框提示筛选结果
driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN) #按向下键 选择结果
driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN)
driver.find_element_by_id("select").send_keys( Keys.ENTER) #单选框的操作,直接通过xpath定位,然后click() berryRadio = driver.find_element_by_xpath("//input[@value='berry']")
# 点击选择“草莓”选项
berryRadio.click() #复选框操作,直接通过xpath定位,然后click()选中,再次click()取消选择 berryCheckBox = self.driver.find_element_by_xpath("//input[@value='berry']")
# 点击选择“草莓”选项
berryCheckBox.click() #断言,assert
assert "首页" in driver.page_source, "页面源码中不存在该关键字!" #如果断言失败,提示的错误信息 *****************************浏览器内部,截屏get_screen_shot_as_file(filepath)*********************** result = driver.get_screenshot_as_file(r"e:\screenPicture.png")
print (result) #成功返回True #截图 不只是浏览器 屏幕都可以截图,不能滚屏 from PIL import ImageGrab
im=ImageGrab.grab()
im.save("e:\\1.jpg","jpeg") #创建当前日期(年月日)的目录,然后截图(时分秒.png)存到目录 import os
import os.path
import time
from selenium import webdriver
urls=["http://www.baidu.com","http://www.sogou.com","http://cn.bing.com"] dir_name=time.strftime("%Y-%m-%d",time.localtime())
if not os.path.exists("e:\\"+dir_name):
os.mkdir("e:\\"+dir_name)
driver = webdriver.Ie(executable_path = "f:\\IEDriverServer")
os.chdir("e:\\"+dir_name)
for url in urls:
driver.get(url)
driver.get_screenshot_as_file(time.strftime("%H-%M-%S",time.localtime())+".png") ************************************页面元素拖拽***************************** import unittest
import time
import chardet
from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self):
#启动IE浏览器
#self.driver = webdriver.Firefox(executable_path = "e:\\geckodriver")
#self.driver = webdriver.Ie(executable_path = "f:\\IEDriverServer")
self.driver = webdriver.Chrome(executable_path = "f:\\chromedriver") def test_dragPageElement(self):
url = "http://jqueryui.com/resources/demos/draggable/scroll.html"
# 访问被测试网页
self.driver.get(url)
# 获取页面上第一个能拖拽的页面元素
initialPosition = self.driver.find_element_by_id("draggable")
# 获取页面上第二个能拖拽的页面元素
targetPosition = self.driver.find_element_by_id("draggable2")
# 获取页面上第三个能拖拽的页面元素
dragElement = self.driver.find_element_by_id("draggable3")
# 导入提供拖拽元素方法的模块ActionChains
from selenium.webdriver import ActionChains
import time
"""
创建一个新的ActionChains,将webdriver实例对象driver作为参数值传入
然后通过WebDriver实例执行用户动作。
"""
action_chains = ActionChains(self.driver)
# 将页面上第一个能被拖拽的元素拖拽到第二个元素位置
action_chains.drag_and_drop(initialPosition, targetPosition).perform()
# 将页面上第三个能拖拽的元素,向右下拖动10个像素,共拖动5次
for i in range(5):
action_chains.drag_and_drop_by_offset(dragElement, 10, 10).perform()
time.sleep(2) def tearDown(self):
# 退出IE浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main() ********************************页面的键盘事件 send_keys(Keys.ENTER)************************* from selenium.webdriver.common.keys import Keys
input_box.send_keys(Keys.F12) #IE浏览器打开调试模式
input_box.send_keys("selenium")
#点击回车键
# 或者使用query.send_keys(Keys.RETURN)
query.send_keys(Keys.ENTER) **********************键盘事件 的例子************************ import unittest
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import win32clipboard as w
import win32con
import time
import win32api # 读取剪切板
def getText():
w.OpenClipboard()
d = w.GetClipboardData(win32con.CF_TEXT)
w.CloseClipboard()
return d # 设置剪切板内容
def setText(aString):
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard() VK_CODE ={
'enter':0x0D,
'ctrl':0x11,
'a':0x41,
'v':0x56,
'x':0x58
} #键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0) #键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0) content = '我是谁'
# 将content变量中的内容设置到剪切板中
setText(content)
# 从剪切板中获取刚设置到剪切板中的内容
getContent = getText()
print ("剪切板中的内容:",getContent.decode("gbk")) #注意需要转换字符串类型 # 将焦点切换到搜索输入框中
driver.find_element_by_id("kw").click() keyDown('ctrl')
keyDown('v')
# 释放Ctrl + v组合键
keyUp('v')
keyUp('ctrl')
# 点击“百度一下”搜索按钮
self.driver.find_element_by_id('su').click() ********************** ActionChains 执行ctrl+a ctrl+x ctrl+v**************************** import unittest
import time
import chardet
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys ActionChains(driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform() #ctrl+a
ActionChains(driver).key_down(Keys.CONTROL).send_keys('x').key_up(Keys.CONTROL).perform() #ctrl+x driver.get(url)
driver.find_element_by_id("kw").click()
# 模拟Ctrl + V组合键,将从剪切板中获取到的内容粘贴到搜索输入框中
ActionChains(driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform() #ctrl+v
# 点击“百度一下”搜索按钮
self.driver.find_element_by_id('su').click() **********************************利用win32的方式 实现上述例子************************* import unittest
import time
import chardet
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
# 导入模拟组合按键需要的包
import win32api
import win32con
import time VK_CODE ={
'enter':0x0D,
'ctrl':0x11,
'a':0x41,
'v':0x56,
'x':0x58,
't':0x54
} #键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
#键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0) # 模拟Ctrl + a,选中输入框中所有的内容
keyDown('ctrl')
keyDown('a')
# 释放Ctrl + a组合键
keyUp('a')
keyUp('ctrl')
# 模拟Ctrl + x剪切所选中的内容
keyDown('ctrl')
keyDown('x')
keyUp('x')
keyUp('ctrl')
# 访问百度首页
self.driver.get("http://www.baidu.com")
# 将焦点切换到搜索输入框中
self.driver.find_element_by_id("kw").click()
# 模拟Ctrl + v组合键,进行粘贴
keyDown("ctrl")
keyDown("v")
keyUp('v')
keyUp('ctrl')
# 模拟回车键
keyDown('enter')
keyUp('enter') ******************************************键盘所有按键的清单*********************************** VK_CODE = {
'backspace': 0x08,
'tab': 0x09,
'clear': 0x0C,
'enter': 0x0D,
'shift': 0x10,
'ctrl': 0x11,
'alt': 0x12,
'pause': 0x13,
'caps_lock': 0x14,
'esc': 0x1B,
'spacebar': 0x20,
'page_up': 0x21,
'page_down': 0x22,
'end': 0x23,
'home': 0x24,
'left_arrow': 0x25,
'up_arrow': 0x26,
'right_arrow': 0x27,
'down_arrow': 0x28,
'select': 0x29,
'print': 0x2A,
'execute': 0x2B,
'print_screen': 0x2C,
'ins': 0x2D,
'del': 0x2E,
'help': 0x2F,
'': 0x30,
'': 0x31,
'': 0x32,
'': 0x33,
'': 0x34,
'': 0x35,
'': 0x36,
'': 0x37,
'': 0x38,
'': 0x39,
'a': 0x41,
'b': 0x42,
'c': 0x43,
'd': 0x44,
'e': 0x45,
'f': 0x46,
'g': 0x47,
'h': 0x48,
'i': 0x49,
'j': 0x4A,
'k': 0x4B,
'l': 0x4C,
'm': 0x4D,
'n': 0x4E,
'o': 0x4F,
'p': 0x50,
'q': 0x51,
'r': 0x52,
's': 0x53,
't': 0x54,
'u': 0x55,
'v': 0x56,
'w': 0x57,
'x': 0x58,
'y': 0x59,
'z': 0x5A,
'numpad_0': 0x60,
'numpad_1': 0x61,
'numpad_2': 0x62,
'numpad_3': 0x63,
'numpad_4': 0x64,
'numpad_5': 0x65,
'numpad_6': 0x66,
'numpad_7': 0x67,
'numpad_8': 0x68,
'numpad_9': 0x69,
'multiply_key': 0x6A,
'add_key': 0x6B,
'separator_key': 0x6C,
'subtract_key': 0x6D,
'decimal_key': 0x6E,
'divide_key': 0x6F,
'F1': 0x70,
'F2': 0x71,
'F3': 0x72,
'F4': 0x73,
'F5': 0x74,
'F6': 0x75,
'F7': 0x76,
'F8': 0x77,
'F9': 0x78,
'F10': 0x79,
'F11': 0x7A,
'F12': 0x7B,
'F13': 0x7C,
'F14': 0x7D,
'F15': 0x7E,
'F16': 0x7F,
'F17': 0x80,
'F18': 0x81,
'F19': 0x82,
'F20': 0x83,
'F21': 0x84,
'F22': 0x85,
'F23': 0x86,
'F24': 0x87,
'num_lock': 0x90,
'scroll_lock': 0x91,
'left_shift': 0xA0,
'right_shift ': 0xA1,
'left_control': 0xA2,
'right_control': 0xA3,
'left_menu': 0xA4,
'right_menu': 0xA5,
'browser_back': 0xA6,
'browser_forward': 0xA7,
'browser_refresh': 0xA8,
'browser_stop': 0xA9,
'browser_search': 0xAA,
'browser_favorites': 0xAB,
'browser_start_and_home': 0xAC,
'volume_mute': 0xAD,
'volume_Down': 0xAE,
'volume_up': 0xAF,
'next_track': 0xB0,
'previous_track': 0xB1,
'stop_media': 0xB2,
'play/pause_media': 0xB3,
'start_mail': 0xB4,
'select_media': 0xB5,
'start_application_1': 0xB6,
'start_application_2': 0xB7,
'attn_key': 0xF6,
'crsel_key': 0xF7,
'exsel_key': 0xF8,
'play_key': 0xFA,
'zoom_key': 0xFB,
'clear_key': 0xFE,
'+': 0xBB,
',': 0xBC,
'-': 0xBD,
'.': 0xBE,
'/': 0xBF,
'`': 0xC0,
';': 0xBA,
'[': 0xDB,
'\\': 0xDC,
']': 0xDD,
"'": 0xDE,
'`': 0xC0
}

selenium 全天课整理(二)的更多相关文章

  1. NeHe OpenGL教程 第十八课:二次几何体

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. 树和堆(julyedu网课整理)

    date: 2018-12-05 16:59:15 updated: 2018-12-05 16:59:15 树和堆(julyedu网课整理) 1 定义 1.1 树的定义 它是由n(n>=1)个 ...

  3. 单元测试系列之十:Sonar 常用代码规则整理(二)

    摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...

  4. selenium webdriver学习(二)————对浏览器的简单操作(转载JARVI)

    selenium webdriver学习(二)————对浏览器的简单操作 博客分类: Selenium-webdriver   selenium webdriver对浏览器的简单操作 打开一个测试浏览 ...

  5. selenium定位方法(二)

    selenium定位方法(二)  1.xpath定位:xpath是在XML中查找节点所在的路径的表达式 1)绝对路径的Xpath表达式 例:/html/body/div/div[1]/ul//li[3 ...

  6. 栈&队列&并查集&哈希表(julyedu网课整理)

    date: 2018-11-25 08:31:30 updated: 2018-11-25 08:31:30 栈&队列&并查集&哈希表(julyedu网课整理) 栈和队列 1. ...

  7. 算法初步(julyedu网课整理)

    date: 2018-11-19 13:41:29 updated: 2018-11-19 14:31:04 算法初步(julyedu网课整理) 1 O(1) 基本运算 O(logn) 二分查找 分治 ...

  8. selenium第一课(selenium+java+testNG+maven)

    selenium介绍和环境搭建 一.简单介绍 1.selenium:Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包 ...

  9. Selenium使用方法整理

    我采用的是Python来使用selenium库,同时java也可以使用,但不如python操作起来方便.下文都会以python的操作为例子,整理我学习selenium过程中收集到的方法. 一:安装 首 ...

随机推荐

  1. ucos III中任务之间的数据通信和任务划分

    1. 如果将关系密切(比如两个任务之间需要经常收发数据)的若干功能分别用不同的任务来实现,则需要进行大量的任务之间数据通信和同步通信,这系统来说是一个很大的负担.因此应该将关系密切的若干功能组合成一个 ...

  2. 解决Python查询Mysql数据库信息乱码问题

    今天尝试着用 Python 写了个脚本试着连接 mysql 数据库,并查询里边的数据,不过最终查询结果中文字符变成了ascii格式. 代码如下: #!/usr/bin/python #encoding ...

  3. CentOS 7.5二进制部署Kubernetes1.12(加密通信)(五)

    一.安装方式介绍 1.yum 安装 目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面,使用 yum 安装,好处是简单,坏处也很明显,需要官方更新 yum 源才能 ...

  4. .Net Core使用 MiniProfiler 进行性能分析

    官方文档: https://miniprofiler.com/dotnet/AspDotNetCore 1.添加包 MiniProfiler.AspNetCore.Mvc   和    MiniPro ...

  5. python递归函数(10)

    一个函数在函数体内部调用自己,这样的函数称为递归函数,递归的次数在python是有限制的,默认递归次数是997次,超过997次会报错:RecursionError. 一.递归函数案例 案例一:计算数字 ...

  6. 谈谈php里的IOC控制反转,DI依赖注入(转)

    转自:http://www.cnblogs.com/qq120848369/p/6129483.html 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和" ...

  7. Sql日期查询-SQL查询今天、昨天、7天内、30天

    今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:select * from 表名 where ...

  8. prometheus+alertmanager+granafa监控总结,安装基于docker-compose(长期更新)

    最近自己个人尝试在使用prometheus+grafana监控工作业务上的指标, 但是报警功能还没有实际用上,但是感觉是很好用,写下一些啃prometheus官网文档并且自己用到的一些配置的总结,后续 ...

  9. 『Go基础』第1节 Go语言简介

    1. Go语言简介 Go语言起源于2007年, 并于2009年开源. Go语言是一门全新的静态类型开发语言, 具有自动垃圾回收, 丰富的内置类型, 错误处理, 并发编程等特征.

  10. 【LEETCODE】54、数组分类,简单级别,题目:605、532

    数组类,简单级别完结.... 不容易啊,基本都是靠百度答案.... 希望做过之后后面可以自己复习,自己学会这个解法 package y2019.Algorithm.array; /** * @Proj ...