Selenium-WebDriverApi接口
启动浏览器
from selenium import webdriver driver = webdriver.Chrome() #启动浏览器,创建一个remote server driver.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,y 11 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 False 13 element.is_displayed() 14 #返回元素是否被选中 True or False 15 element.is_selected() 16 #返回标签元素的名字 17 element.tag_name 18 #获取当前标签的宽和高 19 element.size 20 #获取元素的文本内容 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删除对应cookie 10 driver.delete_cookie('UiCode')
9、浏览器操作
1 #刷新 2 driver.refresh() 3 #前进 4 driver.forward() 5 #后退 6 driver.back()
10、其他
1 #返回页面源码 2 driver.page_source 3 #返回tag标题 4 driver.title 5 #返回当前url 6 driver.current_url 7 #获取浏览器名称 如:chrome 8 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_option 12 13 # 返回所有选中的optionElement对象 14 Select(s).all_selected_options 15 16 # 取消所有选中的option 17 Select(s).deselect_all() 18 19 # 通过option的index来取消对应的option 20 Select(s).deselect_by_index(1) 21 22 # 通过value属性,来取消对应option 23 Select(s).deselect_by_value('') 24 25 # 通过option的文本内容,取消对应的option 26 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()