最近研究了web端自动化,发现很好玩啊,以下是一些基础内容,有兴趣,就玩玩吧
1.主要介绍查找控件的八种方式
html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--块元素--> <div id="my_div" name="my_div" class="my_div"> <input type="text" name="username" id="username" class="username"><br> <input type="password" name="password" id="password" class="password"> </div> <div id="my_div2" class="my_div2"> <a href="http://www.baidu.com" id="click" class="click">点击一下</a> </div> </body> </html>
py文件
#-*-coding:utf-8-*- #倒包 from selenium import webdriver #导入休眠包 import time #打开浏览器 driver=webdriver.Firefox() #设置窗口最大化 driver.maximize_window() #打开指定网页 driver.get("file:///D:\MyShoppingyuliguo20170922/20171225.html") #开始查找控件 #8种查找控件的方式 #1.id #username=driver.find_element_by_id("username") #2.class #username=driver.find_element_by_class_name("username") #3.name #username=driver.find_element_by_name("username") # 通过 xpath 定位 # xpaht 分为相对路径 和 绝对路径定位 # 绝对路径定位 / 代表绝对路径 #username=driver.find_element_by_xpath("/html/body/div/input") # 并列的input标签定位 #username = driver.find_element_by_xpath("/html/body/div[1]/input[2]") #代表相对路径id name class #username=driver.find_element_by_xpath("//div[@id='my_div']/input[1]") #password=driver.find_element_by_xpath("//div[@id='my_div']/input[2]") # 相对定位 name # username = driver.find_element_by_xpath("//div[@name = 'my_div']/input[1]") # # password = driver.find_element_by_xpath("//div[@name = 'my_div']/input[2]") # 相对定位的 class # username = driver.find_element_by_xpath("//div[@class = 'my_div']/input[1]") # password = driver.find_element_by_xpath("//div[@class = 'my_div']/input[2]") # # # #向里面输入内容 # username.send_keys(u"中国,你好") # password.send_keys('123456') #5.tag定位 #a=driver.find_element_by_tag_name("a") #6.通过内容查找 #a=driver.find_element_by_link_text("点击一下") #7.通过部分内容去查找 #a=driver.find_element_by_partial_link_text("点击") #8.通过css去查询数据 #首先css样式的格式 控件的#id或者 控件。class #a=driver.find_element_by_css_selector("a#click") #a=driver.find_element_by_css_selector("a.click") #如果控件本身没有class 同时也没有id 通过父类class或者父类的id来写css a=driver.find_element_by_css_selector("div.my_div2>a") # 父类的class a=driver.find_element_by_css_selector("div.my_div2>a") # 点击一下 a.click() #设置休眠时间 time.sleep(2) #后退到前一个页面 driver.back() #休眠两秒 time.sleep(2) #前进到八维 driver.forward() #休眠两秒 time.sleep(2) #关闭浏览器 driver.quit() 2.通过form找控件的方式
html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <!--form表单提交--> <!--1.get网络请求只能请求128KB数据 post理论上无限请求 2.get请求的参数在head里面 post请求的参数在body里面 3.get请求参数URL里面可见,post请求参数不可见 --> <form method="get"> <input type="text"name="username"><br> <input type="password" name="password"><br> <input type="submit" name="commit" value="提交"> </form> <a href="http://www.baidu.com">点击一下</a> <div> 中国,你好! </div> </body> </html> py文件
#-*- coding:utf-8-*- from selenium import webdriver #导入time import time #打开浏览器 driver=webdriver.Firefox() #设置窗口最大化 driver.maximize_window() #打开指定网页 driver.get("file:///D:\MyShoppingyuliguo20170922/20171226.html") #开始查找控件 username=driver.find_element_by_css_selector("form>input[name='username']") password=driver.find_element_by_css_selector("form>input[name='password']") commit=driver.find_element_by_css_selector("form>input[name='commit']") #注意中文前需要加u username.send_keys(u"于力国") password.send_keys("123456") #获取控件的尺寸,返回的是一个字典 bord=username.size print bord['width'],bord['height'] #获取属性值 print username.get_attribute("type"),username.get_attribute("name") #通过text获取控件内容 #css查找 a=driver.find_element_by_css_selector("body>a") a.click() # print a.text # #判断元素是不是可见 可见返回true,不可见返回false # print username.is_displayed() #清除输入框 #username.clear() # #点击按钮 # commit.click() time.sleep(2) #后退到前一个页面 driver.back() time.sleep(2) #前进到八维 driver.forward() #休眠两秒 time.sleep(2) #关闭浏览器 driver.quit()
3.鼠标事件
html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>鼠标事件</title> <!-- 设置css --> <style type="text/css"> div{ width: 200px; height: 200px; background: #ff0000; } </style> <!-- js --> <script type="text/javascript"> function over_div(message) { alert(message) } </script> </head> <body> <div id="my_div1" οnmοuseοver="over_div('鼠标浮动上来了')"οnmοuseοut="over_div('鼠标出去了')"></div> <div id="my_div"></div> </body> </html>
py文件
#-*-coding:utf-8-*- #倒包 from selenium import webdriver #倒包 from selenium.webdriver.common.action_chains import ActionChains #打开浏览器 driver=webdriver.Firefox() #打开指定网页 driver.get("file:///D:\MyShoppingyuliguo20170922/2017122602.html") #设置窗口最大化 driver.maximize_window() #查找控件 div=driver.find_element_by_css_selector("body>div[id='my_div1']") #浮动鼠标上来 ActionChains(driver).move_to_element(div).perform()
4.通过css查找元素
html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>无序列表</title> </head> <body> <!-- 放一个无序列表 --> <ul> <li><a href="http://www.baidu.com" class="title">北京</a></li> <li><a href="http://www.jd.com" class="title">大连</a></li> <li><a href="http://www.taobao.com" class="title">上海</a></li> <li><a href="http://www.baidu.com" class="title">广州</a></li> <li><a href="http://www.baidu.com" class="title">深圳</a></li> </ul> </body> </html>
py文件
#-*-coding:utf-8 -*- #倒包 from selenium import webdriver #倒包 import time #打开浏览器 driver=webdriver.Firefox() #设置最大化 driver.maximize_window() #打开指定网页 driver.get("file:///D:\MyShoppingyuliguo20170922/2017122603.html") #通过css查找一族元素 #lis = driver.find_elements_by_css_selector("body > ul > li") #lis = driver.find_elements_by_class_name("title") lis = driver.find_elements_by_tag_name("a") # 获取列表第一个点击一下 lis[0].click() # 休眠两秒 time.sleep(2) # 点击返回按钮 driver.back() # 休眠两秒 time.sleep(2) # 关闭 driver.quit()
5.切换frame,
html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>嵌套百度页面</title> <style type="text/css"> #iframeid{ width: 80%; height: 800px; border: 0px; } </style> </head> <body> <iframe src="http://www.baidu.com" id="iframeid"></iframe> </body> </html>
py文件
#-*-coding:utf-8-*-
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.maximize_window()
# driver.get("file:///D:\MyShoppingyuliguo20170922/2017122604.html")
# iframeid=driver.find_element_by_id("iframeid")
# # 切换到frame里面
# driver.switch_to_frame(iframeid)
# kw=driver.find_element_by_id("kw")
# kw.send_keys(u"中国,你好")
# time.sleep(2)
# driver.quit()
# 打开指定网页
driver.get("file:///D:\MyShoppingyuliguo20170922/20171225.html")
# 点击一下
click=driver.find_element_by_link_text("点击一下")
#获取当前窗口
current=driver.current_window_handle
click.click()
# 获取所有的窗口
windows=driver.window_handles
print windows
for windows in windows:
if current!=windows:
driver.switch_to_window(windows)
kw=driver.find_element_by_id("kw")
time.sleep(5)
driver.close()
6.三种休眠方式和粘贴复制全选
HTML文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <!--form表单提交--> <!--1.get网络请求只能请求128KB数据 post理论上无限请求 2.get请求的参数在head里面 post请求的参数在body里面 3.get请求参数URL里面可见,post请求参数不可见 --> <form method="get"> <input type="text"name="username"><br> <input type="password" name="password"><br> <input type="submit" name="commit" value="提交"> </form> <a href="http://www.baidu.com">点击一下</a> <div> 中国,你好! </div> </body> </html>
py文件
#-*-coding:utf-8-*- from selenium import webdriver #引入key包 from selenium.webdriver.common.keys import Keys import time #导入休眠包 from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver=webdriver.Firefox() driver.maximize_window() driver.get("file:///D:\MyShoppingyuliguo20170922/20171226.html") #通过css查找控件 username=driver.find_element_by_css_selector("form>input[name='username']") password=driver.find_element_by_css_selector("form>input[name='password']") #首先在用户名中输入内容 username.send_keys(u"大饼") time.sleep(5) # 通过全选选中,来复制用户名,粘贴到密码框 # 选中全部输入的内容 #username.send_keys(Keys.CONTROL,'A') # time.sleep(5) # username.send_keys(Keys.CONTROL,'C') #time.sleep(2) # 清空用不输入框 #username.clear() # time.sleep(5) # username.send_keys(Keys.CONTROL,'V') #获取title print driver.title #获取URL print driver.current_url #1.强制休眠 time包 设置固定的时间去等待,时间从代码执行的这一行开始计时 #time.sleep("设置休眠时间") #2.隐式等待 webdriver 自带的设置休眠时间 这种当时的休眠时间是对整个页面起作用的 #driver.implicitly_wait("休眠的时间") #3.显示等待 设置固定的时间,同时设置每隔几秒去访问浏览器看看元素有没有被加载出来,如果元素加载出来,休眠结束,执行下面代码 #如果没有元素被加载出来,在固定时间内继续休眠,如果超出时间抛异常 #显示等待 #python中抛异常 # try: # # 在查找控件之前首先需要检查元素有没有被加载出来 # name=(By.NAME,"username") # # 设置等待 # WebDriverWait(driver,20,1).until(EC.presence_of_element_located(name)) # # 查找控件 # username=driver.find_element_by_name("username") # except Exception,e: # print "没有加载出来",e #隐式等待 driver.implicitly_wait(5) # # 强制等待 # # time.sleep(5) driver.quit()
7.下拉框处理
html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>下拉框处理</title> </head> <body> <select id="my_select"> <option value="1990">1990</option> <option value="1991">1991</option> <option value="1992">1992</option> <option value="1993">1993</option> <option value="1994">1994</option> </select> </body> </html> py文件
#-*-coding:utf-8-*- from selenium import webdriver import time driver=webdriver.Firefox() driver.get("file:///D:\MyShoppingyuliguo20170922/2017122605.html") #查找控件 my_select=driver.find_element_by_id("my_select") #选择1993 my_select.find_element_by_xpath("//option[@value='1993']").click() #设置休眠 time.sleep(2) driver.quit()
8.alter
HTML文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>alert</title> <style type="text/css"> #my_div{ width: 100px; height: 100px; background: #ff0000; } </style> <script type="text/javascript"> function function_name() { var message=prompt("请输入内容") alert(message) } </script> </head> <body> <div οnclick="function_name()"id="my_div"></div> </body> </html> py文件
#-*-coding:utf-8-*- from selenium import webdriver import time driver=webdriver.Firefox() driver.maximize_window() driver.get("file:///D:\MyShoppingyuliguo20170922/2017122606.html") my_div=driver.find_element_by_id("my_div") my_div.click() time.sleep(1) #接收alert alert=driver.switch_to_alert() #输入内容 alert.send_keys(u"大连必胜") # #点击接收按钮 # alert.accept() #点击取消 alert.dismiss() time.sleep(2) driver.quit()
9.上传文件
HTML文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form method="post"> <input type="file" name="files"> </form> </body> </html> py文件
#-*-coding:utf-8-*- from selenium import webdriver import time driver=webdriver.Firefox() driver.maximize_window() driver.get("file:///D:\MyShoppingyuliguo20170922/2017122607.html") files=driver.find_element_by_name("files") files.send_keys("C:\Users\Administrator\Desktop\aaa.xlsx") time.sleep(10) driver.quit() 10.文件下载 py文件
#-*-coding:utf-8-*- from selenium import webdriver #导入os包 import os fp=webdriver.FirefoxProfile() # browser.downlboad.folderList 为0的时候下载到默认路径,为2的可以指定浏览器下载的路径 fp.set_preference("browser.download.folderList",2) # browser.download.manager.showWhenStarting True fp.set_preference("browser.download.manager.showWhenStarting",True) # browser.download.dir 指定文件的保存路径 fp.set_preference("browserdownload.dir", os.getcwd()) # browser.helperApps.neverAsk.saveToDisk 指定文件类型 fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream") # 打开浏览器 browser = webdriver.Firefox(firefox_profile=fp) # 设置最大化 browser.maximize_window() #访问网络请求 browser.get("下载文件的地址") # 点击按钮下载 # browser.find_element_by_link_text("selenium-3.8.0.tar.gz").click()
11.js,这个模块有点问题,我还没想起来,附上日后在更
html文件
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <title>js</title> <script type="text/javascript" async="" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" /> <script type="text/javascript"> $(document).ready(function(){ $('#tooltip').tooltip({"placement": "right"}); }); </script> </head> <body> <h3>js</h3> <div class="row-fluid"> <div class="span6 well"> <a id="tooltip" href="#" data-toggle="tooltip" title=" selenium-webdriver(python)">hover to see tooltip</a> <a class="btn">Button</a> </div> </div> </body> <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script> </html>
py文件
#-*-coding:utf-8-*- from selenium import webdriver import time,os driver=webdriver.Firefox() file_path="file:///D:\MyShoppingyuliguo20170922/2017122701.html " driver.get(file_path) #通过Js隐藏选中的元素 #第一种方法隐藏文件信息 driver.execute_script('$("#tooltip").fadeOut();') time.sleep(5) #隐藏按钮 button=driver.find_element_by_class_name('btn') driver.execute_script('$(argument[2].fadeOut()',button) time.sleep(5) driver.quit()