一、基础代码
# 1.导包
from selenium import webdriver
# 2.实例化浏览器对象
driver = webdriver.Chrome()
# 3.打开网址
driver.get('url')
# 4.关闭浏览器驱动
driver.quit()
二、元素定位方法
# 1.id定位
el = driver.find_element(By.ID,'ID_name')
# 2.class定位
el = driver.find_element(By.CLASS_NAME,'CLASS_NAME')
# 3.tag_name
el = driver.find_element(By.TAG_NAME,'TAG_name')
# 4.name
el = driver.find_element(By.NAME,'name')
# 5.link_text
el = driver.find_element(By.LINK_TEXT,'TEXT') # 精确匹配
el = driver.find_element(By.PATIAL_LINK_TEXT,'TEXT') # 模糊匹配
# 6.xpath
el = driver.find_element(By.XPATH,'XPATH')
# 7.css
el = driver.find_element(By.CSS,'CSS_name')
1.xpath
(1)路径策略
绝对路径:从html根节点开始定位,但是不推荐,原因是之后一旦页面的机构发生变化修改麻烦
相对路径:以//开头
主要是通过开发者工具获取路径
(2)利用元素属性
//*[@属性名 = 'value']
*:代表任意层级,但是属于全局性的所以效率较低
//tag_name[@attribute = 'value']
注意唯一性问题,当属性值相同的元素,查找出来的为第一个符合条件的元素
(3)属性与逻辑相结合
//*[@属性名 = 'value' and @属性名 = 'value' ]
可以解决唯一性问题
(4)层级与属性结合
目标元素无法直接定位可以先考虑获取父级或者祖级元素再进行定位
//*[@父级元素属性名 = 'value' ]/目标元素标签名
//:代表任意层级
(5)延伸
//*[@text = 'value'] 文本内容为value
//*[contains(@attribute,'value') 属性值中包含value
//*[start-with(@attribute,'value') 以value值开头
2.css
(1)id选择器
el = driver.find_element(By.CSS,'#id')
(2)class选择器
el = driver.find_element(By.CSS,'.class_name')
(3)元素选择器
el = driver.find_element(By.CSS,'element')
(4)属性选择器
el = driver.find_element(By.CSS,'element[attribute = value]')
(5)层级选择器
el = driver.find_element(By.CSS,'父级[attribute = value] > 子级[attribute = value] ')
el = driver.find_element(By.CSS,'祖级[attribute = value] 子级[attribute = value] ')
三、元素操作方法
# 1.点击
el.click()
# 2.清空
el.clear()
# 3.输入
el.send_keys("text")
四、浏览器操作方法
# 1.最大化窗口
driver.maximize()
# 2.设置窗口大小
driver.set_window_size(w,h)
# 3.设置窗口显示位置
driver.set_window_position(x,y)
# 4.后退
driver.back()
# 5.前进
driver.forward()
# 6.刷新
driver.refresh()
# 7.关闭窗口
driver.close()
# 8.关闭驱动
driver.quit()
# 9.获取标题
driver.title
# 10.获取当前url
driver.current_url
五、获取元素信息
# 1.元素大小
el.size
# 2.元素的文本
el.text
# 3.元素是否可见
el.is_displayed()
# 4.元素是否备选
el.is_selected()
# 5.元素是否可用
el.is_enabled()
# 6.获取属性值
el.get_attribute('')
六、鼠标操作
# 1.导包后实例化鼠标操作对象
action = ActionChains(driver)
# 2.操作
action.context_click(el) # 右键
action.double_click(el) # 双击
action.drag_and_drop(source_el,target_el) # 拖放
action.move_to_element(el) # 移动
# 3.执行操作
action.perform()
七、元素等待
# 1.隐士等待
driver.implicitly_wait(timeout)
# 全局设置一次,如果找不到则会抛出NoSuchElementException
# 2.显示等待
locator = driver.find_element(By.ID,'ID_NAME')
wait = WebDriverWait(driver,poll_frequency,timeout)
wait.until(expected_conditions.presence_of_element_located(locator))
# 3.强制等待
driver.sleep(timeout)
八、下拉框
# 1.实例化下拉框对象
select = Select(el)
# 2.下拉框操作
select.select_by_index()
select.select_by_text()
select.select_by_visible_text(text)
九、弹框处理
注意:
1.只有处理了弹窗才能够继续对页面进行操作
2.弹窗分为系统弹窗以及自定义弹窗,系统弹窗用以下方法,自定义弹窗利用对元素的查找以及操作
# 1.获取弹框
alert = driver.switch_to_alert()
# 2.弹窗操作
alert.text # 获取弹框文字
alert.accept() # 确定
alert.dismiss() # 取消
十、滚动条处理
js = 'window.scrollTo(x,y)'
driver.execute_script(js)
十一、frame处理
# 进入所用的frame
driver.switch_to.frame(attribute)
# 操作完成后推出
driver.switch_to.default()
十二、多窗口处理
# 获取当前页面句柄
driver.current_window_handle
# 获取全部的句柄中的某一个
handle = driver.window_handles[index]
# 切到其他的窗口中
driver.switch_to.window(handle)
十三、截图操作
driver.get_screenshot_as_file(img_path)
十四、验证码操作
1.测试环境中去掉验证码验证
2.万能验证码
3.验证码识别技术
4.记录cookie