Day16-selenium简单入门

元素定位

# 导入
from selenium import webdriver
# 实例化浏览器    启动浏览器
d = webdriver.Chrome()
# 获取页面
# d.get('http://ui.imdsx.cn/uitester/')

# id定位
# el = d.find_element_by_id('i1')
# el.send_keys('通过find_element_by_id发送的值')

# class定位
# el = d.find_element_by_class_name('classname')
# el.send_keys('xxxx')

# css selector定位
# el = d.find_element_by_css_selector('#i1')
# el.send_keys('xxxx')

# name 定位 标签中的name属性定位
# el = d.find_element_by_name('name')
# el.send_keys('xxx')

# link_text 文本内容
# js = 'window.scrollTo(0, 0)'
# d.execute_script(js)    # 执行js代码
# el = d.find_element_by_link_text('跳转大师兄博客地址')
# el.click()

# 模糊匹配
# el = d.find_element_by_partial_link_text('跳转大师兄')
# el.click()

# xpath 定位
# el = d.find_element_by_xpath('//input[@placeholder="请通过XPATH定位元素"]')
# el.send_keys('通过xpath定位')

# tag_name 标签定位
# el = d.find_element_by_tag_name('input')
# el.send_keys('xxxxx')

# 复数形式
# els = d.find_elements_by_class_name('classname')
# els[0].send_keys('xxxxxx')

# 复数加单数共16中,最后两种是单数和复数的底层封装

selenium定位页面元素,优先使用css定位,因为属性一般不会变动,用css定位写的脚本也就比较稳定,即使页面改动,定位的元素层级变动,也不影响,如果css定位不到,就使用xpath定位,

xpath定位的一个缺陷就是元素的层级发生改变时,xpath的表达式也要改变

一些其他比较常用的操作,如下代码所示

from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
# driver.get('http://ui.imdsx.cn/uitester/')
driver.get('http://ui.imdsx.cn/html/')
time.sleep(1)
driver.execute_script('window.scrollTo(0, 0);')
time.sleep(1)
# print(driver.window_handles)
# el = driver.find_element_by_css_selector('[href="/new-index/"]')
# el.click()
# handles = driver.window_handles
# print(handles)
# 两个页面句柄
# ['CDwindow-2C7BB95A7EC0CC01C893F464ADF1E166', 'CDwindow-EBD421B1AF85A501EB8EFAE7932FAD96']
# driver.switch_to.window(handles[1])
# driver.find_element_by_css_selector('#newtag').send_keys('新标签页')

# driver.find_element_by_link_text('跳转大师兄博客地址').click()
# 浏览器后退
# driver.back()
# 浏览器的前进按钮
# driver.forward()
# 获取当前浏览器的大小
# print(driver.get_window_size())
# 设置浏览器的大小
# driver.set_window_size(100, 100)
# 退出驱动 关掉浏览器 所有页面都关了
# driver.quit()
# 关闭当前页面
# driver.close()    # 指针还是指向关闭的那个页面
# driver.switch_to.window(handles[0])    # 重新获得页面,指针指向要操作的页面
driver.find_element_by_css_selector('#i1').send_keys('sdasdasdasd')

# 如果iframe有name属性 或 id属性 则可以直接在frame中填写
# 如果没有 name 和 id 属性  frame() 可以接受 elementObject
# eleObj = driver.find_element_by_css_selector('[src="/new-index/"]')
# 切换到top-frame
# driver.switch_to.frame(eleObj)
# driver.switch_to.frame('top-frame')
# time.sleep(2)
# 输入newtag文案
# driver.find_element_by_css_selector('#newtag').send_keys('dasdasdasd')
# 切换到百度那一层frame
# driver.switch_to.frame('baidu-frame')
# time.sleep(2)
# 输入文案
# driver.find_element_by_css_selector('#kw').send_keys('xxxxx')
# 返回到上一层frame
# driver.switch_to.parent_frame()
# 清空input数据
# driver.find_element_by_css_selector('#newtag').clear()
# 再进入百度frame
# driver.switch_to.frame('baidu-frame')
# 再清楚百度的输入
# driver.find_element_by_css_selector('#kw').clear()
# 返回到最外层
# driver.switch_to.default_content()
# driver.find_element_by_css_selector('#i1').send_keys('在最外层了')

# driver.find_element_by_css_selector('#alert').click()
# print(driver.switch_to.alert.text)
# driver.switch_to.alert.accept()

# el = driver.find_element_by_css_selector('#dis1')
# 判断元素是否在页面上展示
# print(el.is_displayed())
# js = 'document.getElementById("dis1").style.display=""'
# driver.execute_script(js)
# print(el.is_displayed())
# driver.find_element_by_css_selector('#dis1').click()

# 鼠标操作
# 获取要悬浮的元素
# el = driver.find_element_by_css_selector('#a')
# dis1 = driver.find_element_by_css_selector('#dis1')
# 鼠标操作
# ActionChains(driver).move_to_element(el).click(dis1).perform()

# select标签
# 实例化Select 接受一个 select标签
# select = driver.find_element_by_xpath('//select[1]')
# 通过select标签中的option中的value字段定位
# Select(select).select_by_value('4')

 

posted @ 2018-07-13 15:24  飒蓝  阅读(112)  评论(0)    收藏  举报