包名:selenium
支持浏览器:Firefox,InternetExplorerDriver,OperaDriver,Chrome(要使用一种浏览器应下载相应的driver驱动)
firefox: https://github.com/mozilla/geckodriver/releases
chrome: http://chromedriver.storage.googleapis.com/index.html
IE: http://selenium-release.storage.googleapis.com/index.html
一、基本命令
1 dr = selenium.webdriver.Firefox() 打开浏览器; 2 dr.maximize_window() 最大化 3 dr.set_window_size(400,640) 设置浏览器大小; 4 dr.get("url") 打开网页; 5 dr.back() 后退; 6 dr.forward() 前进; 7 dr.current_url 获取当前url; 8 dr.current_window_handle 获得当前窗口; 9 dr.window_handles 获得所有窗口; 10 switch_to_window() 在多窗口之间切换; 11 dr.execute_script() 执行js脚本; 12 dr.quit() 退出浏览器;
二、元素定位
1 dr.find_element_by_id() 2 dr.find_element_by_name() 3 dr.find_element_by_class_name() 4 dr.find_element_by_tag_name() 5 dr.find_element_by_link_text() 6 dr.find_element_by_partial_link_text() 7 dr.find_element_by_xpath()
路径示例:"/html/body/div[2]/form/span/input"
通过id查找:"//input[@id=’input’]" 还可以用and,or进行多个属性联合查找,每个前都需@
能过上一级目录定位:"//span[@id=’input-container’]/input"
dr.find_element_by_css_selector()
三、css元素匹配规则
1 * 通过元素选择器,匹配任何元素; 2 E 标签选择器,匹配所有使用E标签的元素; 3 .info class选择器,匹配所有class属性中包含info的元素; 4 #footer id选择器,匹配所有id属性等于footer的元素; 5 E,F 多元素选择器,同时匹配所有E或F元素; 6 E F 后代元素选择器,匹配所有属于E元素后代的F元素; 7 E>F 子元素选择器,匹配所有E元素的子元素F 8 E+F 毗邻元素选择器,匹配紧随E元素之后的同级元素F(只匹配第一个) 9 E~F 同级元素选择器,匹配所有在E元素之后的同级F元素; 10 E[att='val'] 属性att值为val的E元素; 11 E[att^='val'] 属性att值以val开头的E元素; 12 E[att$='val'] 属性att值以val结尾的E元素; 13 E[att*='val'] 属性att值包含val的E元素; 14 E[att1='v1'][att2='v2'] att1和att2的同时定位; 15 E:contains('xxxx')内容中包含xxxx的E元素; 16 E:not(s) 匹配不符合当前选择器的任何元素;
18 E:nth(n) 在其父元素中的E子元素集合中排在第n+1个E元素(例:css=ul>li:nth(0)) 19 E:eq(n) 同上; 20 E:first 第一个; 21 E:last 最后一个; 22 E:even 偶数位元素; 23 E:odd 奇数位元素; 24 E:lt(n) 前n个元素; 25 E:gt(n) 排在n位之后的元素; 26 E:only-child 父元素的唯一一个子元素且标签为E; 27 E:empty 不包含任何子元素的E元素; 29 find_elements 也可以上各种方法定位元素,主要用于批量操作对象,或者先获取一组对象,然后再从之中选择一个。
四、对已定位到元素(WebElement)的操作
1 click() 单击; 2 send_keys() 输入;还可发送模拟键盘事件,具体键存于selenium.webdriver.common.keys; 3 submit() 提交表单; 4 clear() 清除元素内容;
WebElement的一些属性:
1 size 尺寸; 2 text 元素文本; 3 get_attribute(name) 返回元素的属性值,可以是id,name,type或元素拥有的其它属性; 4 is_displayed() 元素是否用户可见;
五、鼠标操作(ActionChains)常用方法
1 context_click() 右击; 2 double_click() 双击; 3 drag_and_drop(source,target) 拖动; 4 move_to_element() 悬停在一个元素上; 5 click_and_hold() 左键点击一个元素且不释放;
例:ActionChains(driver).context_click(element).perform() perform()
六、alert/comfirm/prompt 等弹出框的处理
使用switch_to.alert() 方法定位到相应的框体;
然后使用以下方法执行相应的操作:
1 text 返回文字信息; 2 accept 确认; 3 dismiss 取消; 4 send_keys 输入值;
七、cookie处理
1 get_cookies() 获得所有cookie信息; 2 get_cookie(name) 返回特定name的cookie信息; 3 add_cookie(cookie_dict) 添加cookie; 4 delete_cookie(name) 删除指定cookie 5 delete_all_cookies() 删除所有cookie信息;
八、补充内容
常用js脚本:
1 var q=document.documentElement.scrollTop=0 将滚动条滑到最开始; 2 $("#tooltip").fadeOut(); 隐藏文字信息; 3 $(arguments[0]).fadeOut() 隐藏按钮; 4 implicitly_wait() 超时等待; 5 switch_to_frame() 切换主框架;
层级定位:可在一个find_element后再接一个.find_element,通过不同层级的两个元素来同时确定一个位置。
上传文件:
先通过定位打开本地弹出框,然后通过send_keys来传入本地文件路径就可以了;