本次主要学习关于selenium元素定位,浏览器的控制等方面的知识,须要必定的HTML基础,了解了HTML基础后,更能好的了解元素定位的方式css
selenium提供了18中元素定位的方式,在这里拣经常使用的8种方式进行学习,还有一些元素操做,浏览器的操做,鼠标操做,切换页面,切换表单等操做html
# selenium之元素定位 from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") # 1.id定位(以打开百度定位到输入框为例) driver.find_elements_by_id("kw")# id具备惟一性 # 2.name定位 driver.find_element_by_name("wd")# name属性能够不惟一,定位时须要确认注意 # 3.class 定位 driver.find_element_by_class_name("s_ipt")# class属性也能够不惟一,定位时须要注意 # 4.tag标签订位 driver.find_element_by_tag_name("input")# 单个标签法案为太广,通常不用这种方法 # 5.link 文本标签 driver.find_element_by_link_text("新闻") # 经过元素标签订的文本信息进行定位 # 6.取部分文本标签进行定位 driver.find_element_by_partial_link_text("新")# 经过取元素标签的部分文本信息进行定位 # 7.xpath 定位 # (1).绝对路径进行定位,经过标签的层级关系找到元素的绝对路径 driver.find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input") # (2).利用元素的属性进行定位 '//'表示当前目录下,'*'表明当前目录下全部标签, # [@id='kw']表示这个元素的id属性值为kw,元素属性能够惟一标记一个元素,均可以用这种方法定位 driver.find_element_by_xpath("//*[@id='kw']") driver.find_element_by_xpath("//*[@class='s_ipt']") # (3).层级与属性结合 driver.ffind_element_by_xpath("//span[@class='bgs_bth']/input") # (4).经过逻辑运算符 经过逻辑运算符链接多个属性查找元素 driver.find_element_by_xpath("//input[@id='kw' and @class='su']/span/input") # 8.css定位 css经过选择器为页面上的元素绑定属性,选择器知识能够经过HTML基础了解 # (1).class 选择器 driver.find_element_by_css_selector(".s_ipt") # '.'表示经过class属性定位元素 # (2)id属性定位 driver.find_element_by_css_selector("#kw") # '#'表示经过id属性定位 # (3).经过标签名进行定位,通常不单独使用,推荐嵌套使用 # 1).经过父子关系定位 driver.find_element_by_css_selector("span>input") # 2).经过任意属性定位,只要能够惟一的标记元素 driver.find_element_by_css_selector("[name=kw]") driver.find_element_by_css_selector("[type=submit]") # 3).组合定位,利用属性与层级关系进行定位 driver.find_element_by_css_selector("form.fm>span>input.s_ipt") driver.find_element_by_css_selector("form#form>span>input#kw") # 控制浏览器操做 # 1.控制浏览器弹窗的大小 driver.set_window_size(480,800)#以规定的大小打开浏览器 driver.maximize_window()#不传参数,以全屏的方式打开浏览器 # 2.控制浏览器的前进,后退,刷新等操做 driver.back()#网页后退 driver.forward()#网页前进 driver.refresh()#网页刷新 # 简单的元素操做 # 1.send_keys() 模拟键盘给输入框内输入值 driver.find_element_by_css_selector("#kw").send_keys("hello") time.sleep(2) # 2.clear() 对输入框内的文本进行清除 driver.find_element_by_css_selector("#kw").clear() # 3.click() 模拟鼠标进行单击 driver.find_element_by_css_selector("#su").click() driver.find_element_by_css_selector("#su").submit() # 上述点击的例子能够用submit,submit方法用于提交表单,相似与“回车”操做,经常与click混用,但没有click应用范围广 # 经常使用鼠标操做 # 鼠标交互的方式包括:右击,双击,悬停,鼠标拖动等功能,在webdriver中,这些方法都封装在ActionChains类中; from selenium.webdriver.common.action_chains import ActionChains # 1.context_click() 右击 right_click = driver.find_element_by_css_selector("xx") ActionChains(driver).context_click(right_click).perform() # 首先定位到要单机的元素:right_click, # 调用ActionChains类,将浏览器驱动driver做为参数传入 # context_click模拟鼠标右击,调用时须要指定元素(right_click) # perform(),执行全部ActionChains中存储行为,能够理解为对整个操做的提交动做 # 2.move_to_element() 鼠标悬停 above = driver.find_element_by_css_selector("xx")# 定位到元素 ActionChains(driver).move_to_element(above).perform()# 对元素进行悬停操做 # 3.double_click 双击 double_click = driver.find_element_by_css_selector("xx") ActionChains(driver).double_click(double_click).perform() # 4.drag_and_drop(source,target) 鼠标拖放 source = driver.find_element_by_css_selector("xx")# 定位到元素的原位置 target = driver.find_element_by_css_selector("xx")# 定位到元素的目标位置 s2 = driver.find_element_by_css_selector("xx") t2 = driver.find_element_by_css_selector("xx") ActionChains(driver).drag_and_drop(source,target).perform() ActionChains(driver).drag_and_drop(source,target).drag_and_drop(s2,t2).perform()#多个图片拖拽 # 多窗口切换 # 1.获取指针所在窗口 print(driver.current_window_handle) # 2.获取到全部tag页面,以列表的形式返回 handles = driver.window_handles # 3.取列表的元素,切换至元素所表明的页面 driver.switch_to_window(handles[-1]) # 多表单切换 # 1.当页面有多个表单页面组合而成的时候,就须要进行表单的切换才能定位到相应的元素 driver.get("xx")# 打开一个多表单网页 driver.switch_to_frame("xx")# 过元素定位到该表单(默认取id,name),而后切换至该表单 driver.switch_to.parent_frame()# 跳出当前一级菜单 driver.switch_to.default_content()# 跳到最外面的页面