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')

浙公网安备 33010602011771号