八大定位方式
find_element_by_id:通过id查找
find_element_by_name:通过name查找
find_element_by_tag_name:通过tag查找
find_element_by_class_name:通过classname查找
find_element_by_link_text:通过超链接的文本查找(完全匹配)(类似xpath的text())
find_element_by_partial_link_text:同上,但是是部分查找
find_element_by_css_selector:通过css选择器
find_element_by_xpath:通过xpath
XPATH知识点总结:
/单斜杠绝对定位
//双斜杠相对定位
使用语法:
//标签[@属性=”值”]
特殊属性:
标签的文本属性值:text()
模糊查找:contains(@属性,"值")
轴运算:
ancestor:祖先节点,包括父节点,一直到根节点html
parent:父节点
preceding:当前元素节点标签之前的所有结点,一直到根节点html
preceding-sibling:当前元素节点标签之前的所有兄弟节点
following:当前元素节点标签之后的所有节点,一直到结束的根节点html
following-sibling:当前元素节点标签之后的所有兄弟节点
使用语法:(轴定位必须用单斜杠)
能定位到的已知的元素/轴名称::标签名称[@属性=”值”]
3个等待方式:
- time.sleep(固定时间)
-
- implicity_wait :隐性等待。等待元素被找到,等待命令执行完成
- WebDriverWait:显性等待,等待类,需要import,还需要引入条件库
-
WebDriverWait(driver, 20, 1).until() (20s等待超时,每隔1s检索一次)
括号内参数:
- driver:webdriver的实例
- 20:最多20s的等待时间
- 1:每隔1s间隔查询一次(内部机制查询)
until() :表示条件成立
until_not(): 表示条件不成立
隐式等待:设置一个超时时间,在这个时间内会去不断寻找元素(全局),超时找不到时就会报错;
显示等待:设置一个超时时间和一个元素查找条件,在这个时间内不断寻找这个元素,超时找不到时就会报错;
三大切换
- 切换窗口
driver.switch_to.window(handle) 切换窗口
Wins = driver.window_handles 获取当前所有句柄
driver.current_windows_handle 获取当前窗口的句柄
driver.switch_to.window(wins[-1]) 切换到最后一个窗口
- 切换iframe
driver.switch_to.iframe()
3种方式
driver.switch_to.frame('name') name属性
driver.switch_to.frame(1) 下标
driver.switch_to.frame(driver.find_elements_by_name("name")) webElement对象
- alert 切换
弹出框分为3种
- alert (弹框只有一个确定按钮)
- prompt (确定取消按钮)
- confirm (确定取消按钮还有一个输入框)
如何关闭他
al = driver.switch_to.alert 获取alert的实例
al.text alert显示的文本
al.accept() 相当于点击确定按钮
al.dismiss() 相当与取消按钮
al.send_keys(“string”) 在输入框内输入文本内容
鼠标操作
from selenium.webdriver.common.action_chains import ActionChains 引入类
ActionChains下面的函数
click() 点击
double_click() 双击
move_to_element() 悬浮鼠标放到元素的正中间
context_click() 右键
drag_and_drop() 一个元素拖拽到另外一个元素
drag_and_drop_by_offset() 坐标偏移的拖动
key_down() 按下按键,只处理控制键 control shift
例如:ctrl+c
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
pause(时间:秒) 暂停
先实例化ActionChains
- 要操作的动作放在链表当中,找到元素,调用鼠标行为
- 调用perform()
下拉列表 select/option
from selenium.webdriver.support.select import Select
loc = (By.XPATH, 'xxxxx')
WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))
select_ele = driver.find_element(*loc)
s = Select(select_ele)
s.select_by_index() # 下标
s.select_by_value() # option的value值
s.select_by_visible_text() # 可见选项文本
键盘操作
from selenium.webdriver.common.keys import Keys 引入,常量
driver.find_element('').send_keys('ss', Keys.ENTER)
总结:
1) iframe切换:
1)触发 iframe/alert
2) 识别:元素是否在iframe当中???
3)切换到iframe: 下标/name属性/webElement对象
driver.switch_to.frame()
2)alert切换:--Alert类
1)触发 iframe/alert
2)切换 driver.switch_to.alert
3) 关闭
3)鼠标操作 ActionChains类
1)调用行为
2)perform()执行
4)下拉列表 Select类
非select: 弹出下拉框,等待下拉框中的元素可见,然后操作
Select: 实例化类,根据下标/文本/value属性选值。
- 键盘操作 Keys类
Js操作
Selenium执行js
Driver.execute_script(script, *args)
滚动操作(会自动)
Element.scrollIntoView(); #js语句,元素滚动到页面最上方
Element.scrollIntoView(false); #js语句,元素滚动到页面最下方
window.scrollTo(0,document.boby.scrollHeight) #js语句,移动到页面底部
window.scrollTo(document.boby.scrollHeight,0) #js语句,移动到页面顶部
步骤
1)查找元素
loc = (By.PARTIAL_LINK_TEXT, '_百度翻译')
ele = driver.find_element(*loc)
- 运行命令
driver.execute_script("arguments[0].scrollIntoView();", ele)
备注:
arguments可以传多个元素,例如
driver.execute_script("arguments[0].scrollIntoView();arguments[1].scrollIntoView();", ele1,ele2)