Selenium-WebDriverApi接口

启动浏览器

from selenium import webdriverdriver = webdriver.Chrome() #启动浏览器,创建一个remote serverdriver.get(http://ui.imdsx.cn/uitester/) #打开client端,获取请求js = window.scrollTo(0,0) #将滚动条调至最上方driver.execute_script(js) #执行js

 

1、获取标签元素:selenium提供了18种定位方式:8种单数+8种复数+2种

 1 #单数定位方式: 2 #1、通过ID定位目标元素 3 driver.find_element_by_id(i1) 4 5 #2、通过class定位目标元素 6 driver.find_element_by_class_name(classname) 7 8 #3、通过name属性定位目标元素 9 driver.find_element_by_name(name)10 11 #4、通过标签名称定位(在一个页面中,标签一般会存在重复,不建议用这种方式定位)12 driver.find_element_by_tag_name(input)13 14 #5、通过链接标签:a标签中的文本查找元素15 driver.find_element_by_link_text(新建标签页面)16 17 #6、通过链接标签:a标签中的部分文本查找元素18 driver.find_element_by_partial_link_text(标签)19 20 #7、通过Xpath定位目标元素21 driver.find_element_by_xpath(//input[@id="i1"])22 23 #8、通过css Selector定位目标元素24 driver.find_element_by_css_selector(#i1)25 driver.find_element_by_css_selector(input[name="name"])
 1 #复数定位方式,返回结果是一个列表类型: 2 #1、通过ID定位目标元素 3 driver.find_elements_by_id(i1) 4  5 #2、通过class定位目标元素 6 driver.find_elements_by_class_name(classname) 7  8 #3、通过name属性定位目标元素 9 driver.find_elements_by_name(name)10 11 #4、通过标签名称定位(在一个页面中,标签一般会存在重复,不建议用这种方式定位)12 driver.find_elements_by_tag_name(input)13 14 #5、通过链接标签:a标签中的文本查找元素15 driver.find_elements_by_link_text(新建标签页面)16 17 #6、通过链接标签:a标签中的部分文本查找元素18 driver.find_elements_by_partial_link_text(标签)19 20 #7、通过Xpath定位目标元素21 driver.find_elements_by_xpath(//input[@id="i1"])22 23 #8、通过css Selector定位目标元素24 driver.find_elements_by_css_selector(#i1)
1 #前面16种方式都是通过调用这个方法实现的2 driver.find_elements(class,inner)3 driver.find_element(id,i1)

 2、窗口操作

 1 #设置浏览器大小 2 driver.set_window_size(300,300) 3  4 #获取浏览器的大小 5 print(driver.get_window_size()) 6  7 #窗口最大化 8 driver.maximize_window() 9 10 #获取当前窗口针对于windows的位置坐标x,y11 driver.get_window_position()12 13 #设置当前窗口针对Windows的位置14 driver.set_window_position(30,30)

3、截图

1 #截图2 driver.get_screenshot_as_file(aaa.jpg)

4、获取浏览器打开的句柄

1 #获取当前浏览器所打开的全部tag页,返回的是一个列表2 print(driver.window_handles)3 4 #获取当前浏览器的当前tag页5 print(driver.current_window_handle)

5、切换tag页

1 handles = driver.window_handles #获取所有的tag页2 driver.switch_to_window(handles[-1]) #切换到最后一个tag页,但是这不是最新的方法3 driver.switch_to.window(handles[-1]) #切换到最后一个tag页,这是新的方法

 6、关闭与退出

1 #当开启多个页面时,关闭当前页面2 driver.close()3 #当开启多个页面时,退出并关闭所有页面4 driver.quit()

7、ElementApi接口

 1 element = driver.find_element_by_css_selector([ng-model="loginCredential.account"]) 2 # 根据标签属性名称,获取属性value 3 element.get_attribute(style) 4 #向输入框输入字符串,如果input的type为file类型,可以输入文件绝对路径上传文件 5 element.send_keys(123566) 6 #清除文本内容 7 element.clear() 8 #鼠标左键点击操作 9 element.click()10 # 通过属性名称获取属性,同.get_attribute()11 element.get_property(id)12 #返回元素是否课件 True or False13 element.is_displayed()14 #返回元素是否被选中 True or False15 element.is_selected()16 #返回标签元素的名字17 element.tag_name18 #获取当前标签的宽和高19 element.size20 #获取元素的文本内容21 element.text
#如果这种方法没办法获取到标签内的文字,可以使用下面这种方式:
element.get_attribute(‘innerText‘)
22 #模仿回车按钮 提交数据
23 element.submit()
24 #获取当前元素的坐标
25 element.location
26 #截取图片
27 element.screenshot()

8、cookie操作

 1 #根据cookieKey,获取cookie信息 2 cookie = driver.get_cookie(cookieKey) 3 #获取所有cookie信息 4 cookies = driver.get_cookies() 5 #添加cookie,严格按照格式添加,cookie的key为name,value为value 6 driver.add_cookie({name:tmp,value:11122336665555}) 7 # 删除所有cookie信息 8 driver.delete_all_cookies() 9 # 根据cookieKey删除对应cookie10 driver.delete_cookie(UiCode)

 9、浏览器操作

1 #刷新2 driver.refresh()3 #前进4 driver.forward()5 #后退6 driver.back()

10、其他

1 #返回页面源码2 driver.page_source3 #返回tag标题4 driver.title5 #返回当前url6 driver.current_url7 #获取浏览器名称 如:chrome8 driver.name

 11、操作iframe

 1 #多层嵌套的iframe 只能一层一层进入 2 driver.switch_to.frame(top-frame) 3 driver.find_element_by_css_selector(#newtag).send_keys(123456) 4  5 driver.switch_to.frame(baidu-frame) 6 driver.find_element_by_css_selector(#kw).send_keys(2222) 7  8 #返回上一层 9 driver.switch_to.parent_frame()10 #返回到最底层11 driver.switch_to.default_content()

12、弹框处理

 1 # alert 实际上也是Selenium的一个模块 2 from selenium.webdriver.common.alert import Alert 3  4 # 也可以通过Webdriver的switch_to来调用 5  6 # 点击确认按钮 7 driver.switch_to.alert.accept() 8  9 # 如果是确认弹框,相当于点击需要和X按钮10 driver.switch_to.alert.dismiss()11 13 # 如果alert上有文本框时,可以输入文字。(注: 没遇到过)14 driver.switch_to.alert.send_keys()15 16 # 返回Alert上面的文本内容17 text = driver.switch_to.alert.text

13、select模块,仅适用于select元素:

引用路径:

1 from selenium.webdriver.support.select import Select

操作:

 1 # 通过select选项的索引来定位选择对应选项(从0开始计数) 2 Select(s).select_by_index(5) 3  4 # 通过选项的value属性值来定位 5 Select(s).select_by_value(2) 6  7 # 通过选项的文本内容来定位 8 Select(s).select_by_visible_text(牡丹江) 9 10 # 返回第一个选中的optionElement对象11 Select(s).first_selected_option12 13 # 返回所有选中的optionElement对象14 Select(s).all_selected_options15 16 # 取消所有选中的option17 Select(s).deselect_all()18 19 # 通过option的index来取消对应的option20 Select(s).deselect_by_index(1)21 22 # 通过value属性,来取消对应option23 Select(s).deselect_by_value(‘‘)24 25 # 通过option的文本内容,取消对应的option26 Select(s).deselect_by_visible_text(‘‘)

 

 小贴士:

1、如果获取到一个元素之后,想要继续获取它的下一层标签,可以继续用查找的方法,例如:

1 css_1 = xpath=>//div[@class="company"]//div[@class="com bg7 pad2"]2 company_list = self.page.get_elements(css_1)3 for company in company_list:4 if company.find_element_by_css_selector([class="comName f2 c1 ng-binding"]).get_attribute(innerText).count(中华):5 company.find_element_by_css_selector([class="sel-b com-input"]>input[type="checkbox"]).click()6 elif company.find_element_by_css_selector([class="comName f2 c1 ng-binding"]).get_attribute(innerText).count(平安):7 company.find_element_by_css_selector([class="sel-b com-input"]>input[type="checkbox"]).click()8 elif company.find_element_by_css_selector([class="comName f2 c1 ng-binding"]).get_attribute(innerText).count(太平洋):9 company.find_element_by_css_selector([class="sel-b com-input"]>input[type="checkbox"]).click()

 

 

 

 

 

 

 

  

相关文章