# import nnlog
# #
# my_log = nnlog.Logger('dashu.log',when='D',backCount=5) # 日志名称 更新方式'D'时每天 backCount:最大保存数量
# # my_log.debug("debug level")
# # my_log.info("info level")
# # my_log.warning("waring level")
# # my_log.error("error level")
# from selenium import webdriver
# driver = webdriver.Chrome() # 创建浏览器服务
# # 请求目标网址
# driver.get('http://ui.imdsx.cn/uitester/')
# 1、发送的http请求
# selenium 是第三方提供的包
# selenium提提供了18种定位方式
# 1、id
# element = driver.find_element_by_id('i1')
# print(element)
# # 向input输入字符串
# element.send_keys('1111')
# # 2、class定位 如果重复则取所有class中第一个
# element = driver.find_element_by_class_name('classname')
# print(element)
# element.send_keys('1111')
# # 3、css selector
# # id='i1'
# # #i1
# # <input id='i1'>
# # element = driver.find_element_by_css_selector('#i1')
# element = driver.find_element_by_css_selector('input[placeholder="请通过CSS SELECTOR定位元素"]')
# element = driver.find_element_by_css_selector('.classname')
# element.send_keys('1111')
# 操作滚动条
# js = 'window.scrollTo(0,0);'
# driver.execute_script(js)
# import time
# time.sleep(2)
# ele = driver.find_element_by_css_selector('#i1')
# # ele.send_keys('滚动条')
# 4、name的定位方式
# ele = driver.find_element_by_name('name')
# ele.send_keys('通过name定位')
# 5、通过xpath
# driver.find_element_by_xpath('//input[@placeholder="请通过CLASSNAME定位元素"]')
# 6、tag name 很不常用
# ele = driver.find_element_by_tag_name('input')
# ele.send_keys(111)
# 7、link_text
# ele = driver.find_element_by_link_text('跳转大师兄博客地址')
# ele.click()
# 8、模糊linktext
# ele = driver.find_element_by_partial_link_text('大师兄博客')
# ele.click()
# 一共18种定位方式
# # 单数
# 1、id
# 2、class
# 3、name
# 4、css *************
# 5、xpath *************
# 6、linktext
# 7、模糊linktext
# 8、tagname
# 复数8种 所有复数形式的定位 都会返回列表 无论列表中是一个元素 还是多个元素
# eles = driver.find_elements_by_class_name('classname')
# print(eles)
# eles[0].send_keys('111')
# 留个作业 ---自己回去把8种复数 都练习一下
# 还有2种是上面16种的抽象方法
# 获取当前浏览器大小
# 下午:
# from selenium import webdriver
# driver = webdriver.Chrome() # 创建浏览器服务
# # 请求目标网址
# driver.get('http://ui.imdsx.cn/uitester/')
#
# # 获取浏览器的大小
# # print(driver.get_window_size())
# # # 最大化浏览器
# # driver.maximize_window()
# # 设置浏览器大小
# # driver.set_window_size(500,500)
# # **** 获取当前浏览器tag的指针
# print('点击前---> %s'%driver.current_window_handle)
#
# # **** 获取浏览器所有的tag指针
# print('点击前---> %s'%driver.window_handles)
#
# # 1、打开uitester的页面
# # 2、打印一下 当前的指针和所有指针
#
# # 3、定位新建标签页面的元素 并点击
# driver.maximize_window()
# js = 'window.scrollTo(0,0);'
# driver.execute_script(js)
# import time
# time.sleep(2)
# driver.find_element_by_css_selector('a[href="/new-index/"]').click()
# # 4、在打印一次当前的指针和所有指针 作对比
# # **** 获取当前浏览器tag的指针
# print('点击后---> %s'%driver.current_window_handle)
#
# # **** 获取浏览器所有的tag指针
# print('点击后---> %s'%driver.window_handles)
# 截图 3种截图 用as file就可以了
# driver.get_screenshot_as_file('tupian1.png')
# 关闭和退出
# driver.maximize_window()
# js = 'window.scrollTo(0,0);'
# driver.execute_script(js)
# import time
# time.sleep(2)
# driver.find_element_by_css_selector('a[href="/new-index/"]').click()
# time.sleep(5)
# driver.quit()
# 退出驱动
# driver.quit()
# 关闭当前指针(句柄)
# driver.close()
# element 的操作
# ele = driver.find_element_by_css_selector('#i1')
# ele.send_keys('元素操作')
# import time
# time.sleep(2)
# # 清除input的文案
# ele.clear()
# 判断元素是否可见
# 判断元素是否勾选
# on = driver.find_element_by_css_selector('#on')
# off = driver.find_element_by_css_selector('#off')
# print(on.is_selected())
# print(off.is_selected())
# switch ****************
# switch windows
from selenium import webdriver
driver = webdriver.Chrome() # 创建浏览器服务
# 请求目标网址
driver.get('http://ui.imdsx.cn/uitester/')
driver.maximize_window()
js = 'window.scrollTo(0,0);'
driver.execute_script(js)
import time
time.sleep(2)
# driver.find_element_by_css_selector('a[href="/new-index/"]').click()
# # 赋值handles
# handles=driver.window_handles
# print('点击后---> %s'%handles)
# # 切换前打印当前的handle
# print('切换前的handle-->: %s'%driver.current_window_handle)
# # 切换到最新打开的页面 划横线代表当前的api调用方式已经过时
# # driver.switch_to_window(handles[1])
# # driver.switch_to.window(handles[1])
# # 切换后再打印当前的handle
# print('切换后的handle-->: %s'%driver.current_window_handle)
# # 像新建的tab页面的元素sendkeys
# driver.find_element_by_css_selector('#newtag').send_keys('切换tab')
# 切换iframe ************************
# # 先在默认打开的页面定位元素 并sendkeys
# driver.find_element_by_css_selector('#i1').send_keys('没切换iframe')
# # 切换iframe
# # driver.switch_to_frame()
# driver.switch_to.frame('top-frame')
#
# # 切换完iframe后 在操作frame里面的元素
# driver.find_element_by_css_selector('#newtag').send_keys('切换后newtag的html')
#
# # 切换进 百度的iframe
# driver.switch_to.frame('baidu-frame')
#
# # 定位百度的输入框 并操作
# driver.find_element_by_css_selector('#kw').send_keys('水瓶座')
#
# # # 一次直接跳到最外层或者说是跳到默认层
# # driver.switch_to.default_content()
# #
# # # 清掉id为i1的元素value
# # driver.find_element_by_css_selector('#i1').clear()
#
# # 返回到当前html的上层
# driver.switch_to.parent_frame()
# # 清掉new的value
# driver.find_element_by_css_selector('#newtag').clear()
#
# # 返回到当前html的上层
# driver.switch_to.parent_frame()
# # 清掉id为i1的value
# driver.find_element_by_css_selector('#i1').clear()
# iframe 如果没有name字段则可以 通过find 先定位iframe 在切换
# 先在默认打开的页面定位元素 并sendkeys
# driver.find_element_by_css_selector('#i1').send_keys('没切换iframe')
# # 切换iframe
# # driver.switch_to_frame()
# # driver.switch_to.frame('top-frame')
# iframe = driver.find_element_by_css_selector('[src="/new-index/"]')
# driver.switch_to.frame(iframe)
#
# # 切换完iframe后 在操作frame里面的元素
# driver.find_element_by_css_selector('#newtag').send_keys('切换后newtag的html')
# alert
# driver.find_element_by_css_selector('#alert').click()
# confirm
# driver.find_element_by_css_selector('#confirm').click()
# # # 取消
# # driver.switch_to.alert.dismiss()
# 确认
# driver.switch_to.alert.accept()
# select **
# from selenium.webdriver.support.select import Select
# driver.maximize_window()
# js = 'window.scrollTo(0,1800);'
# driver.execute_script(js)
# import time
# time.sleep(2)
# sele = driver.find_element_by_xpath('//select[1]')
# print(sele)
# Select(sele).select_by_value('4')
# 先接收select标签
# 在拼接option的css 定位方式
# 在select标签中找符合条件的标签
# 判断一下他是否被选中
# 没选中则 在点击一次
# 鼠标悬浮操作
# 1、从业务角度来说 完全模拟业务
from selenium.webdriver.common.action_chains import ActionChains
# div = driver.find_element_by_css_selector('#a')
# 隐藏的单击按钮
# clickButton = driver.find_element_by_css_selector('#dis1')
# 判断他是否可见
# print('悬浮前:%s'%clickButton.is_displayed())
# 每次调用一个函数 都不是立即执行,而是存到列表中 统一通过perform一起执行
# ActionChains(driver).move_to_element(div).click(clickButton).perform()
# print('悬浮后:%s'%div.is_displayed())
# 2、暴力破解 直接将display none干掉
# js = "document.getElementById('dis1').style.display='';"
# driver.execute_script(js)
# time.sleep(1)
# clickButton = driver.find_element_by_css_selector('#dis1')
# clickButton.click()
# 拼图
# s1 = driver.find_element_by_css_selector('#dragger')
# t1 = driver.find_element_by_css_selector('#i1')
# ActionChains(driver).drag_and_drop(s1,t1).perform()
# ******************* 等待 ******************************
# 1、time 固定等待 无论你是否出现了 他都等那么久 最傻的一种
# import time
# time.sleep(2)
# 2、隐士等待 不够稳定 一般傻用这个
# driver.implicitly_wait(10)
# 3、显示等待 聪明人用这个
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# ele = WebDriverWait(driver,10,0.2).until(EC.visibility_of_element_located((By.CSS_SELECTOR,'#i1')))
# ele.send_keys(1111)
m = EC.visibility_of_element_located((By.CSS_SELECTOR,'#i11'))
res = WebDriverWait(driver,10,0.5).until(m)
res.send_keys(1111)