Seleuim的学习笔记
打开浏览器进入百度搜索seleuim
常用元素定位方式
By.ID
By.CLASS_NAME
By.TAG_NAME
By.NAME
By.LINK_TEXT(用来定位可点击文本标签)
By.PARTIAL_LINK_TEXT(用来定位可点击文本标签)
通过ID元素定位
import time from selenium import webdriver from selenium.webdriver.common.by import By #打开浏览器 driver = webdriver.Chrome() #浏览器最大化 driver.maximize_window() #进入URL网址 driver.get("https:/www.baidu.com") #找到搜索框并且输入seleuim element = driver.find_element(By.ID, "kw") element.send_keys("selenuim") #找到搜索按钮并且点击 driver.find_element(By.ID,"su").click() #页面停止8秒 time.sleep(8) #关闭浏览器 driver.quit()
补充:pycharm快捷键(快速创建变量名:Ctrl+Alt+v;跳转到指定函数:Ctrl+鼠标点击函数名;注释:Ctrl+Alt+L;)
Ctrl+F (find by string ,Xpath,Selector)
通过CLASS_NAME元素定位
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://bilibili.com") # 用CLASS_NAME元素定位 driver.find_element(By.CLASS_NAME, 'nav-search-input').send_keys('软件测试小白') driver.find_element(By.CLASS_NAME, 'nav-search-btn').click() # 当有多个CLASS_NAME时可以直接用find_element(),则默认为第一个 driver.find_element(By.CLASS_NAME, 'channel-link').click() # 或者用find_elements()[下标]来定位找到 driver.find_elements (By.CLASS_NAME, 'channel-link')[4].click()
通过SCC_SELECTOR定位
当一个元素无法直接定位,也就是没有id,name等确定标识,这个时候我们需要考虑使用css_selector定位器。他是一种通过CSS样式选择器来定位元素的方法
import time from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.maximize_window() # 根据ID定位 # driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("软件测试") # driver.find_element(By.CSS_SELECTOR, "#su").click() # 根据class属性值定位 # driver.find_element(By.CSS_SELECTOR, ".nav-search-input").send_keys("软件测试") # 根据name属性值定位 # driver.find_element(By.CSS_SELECTOR, "[name:'wd']").send_keys("selenuim") # 根据标签属性值定位 # driver.find_element(By.CLASS_NAME, "a[herf='http://image.baidu.com/']").click() # 模糊匹配-包含 # driver.find_element(By.CSS_SELECTOR, "a[herf*='image.baidu.com']").click() # 模糊匹配-开头 # driver.find_element(By.CSS_SELECTOR, "a[herf^='http://image.baidu']").click() # 模糊匹配-结尾 # driver.find_element(By.CLASS_NAME, "a[herf$='image.baidu.com/']") # 组合定位 # driver.find_element(By.CSS_SELECTOR, "input.s_ipt").send_keys("selenuim") # 定位子元素 # driver.find_element(By.CSS_SELECTOR, "div#s-top-left>a").click() # driver.find_element(By.CSS_SELECTOR, "#s-top-left>a").click() # driver.find_element(By.CSS_SELECTOR, "div.s-top-left-new.s-isindex-wrap>a").click() # driver.find_element(By.CSS_SELECTOR, "div#s-top-left>a:nth-child(3)").click() # driver.find_elements(By.CSS_SELECTOR,"div#s-top-left>a")[3].click() driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:first-child").click() time.sleep(3) driver.close()
通过XPATH定位
XPATH可以通过相对路径与绝对路径去定位元素,绝对路径从HTML根节点开始算,相对路径从任意节点开始。
说明 | 举例 |
---|---|
从根节点开始选取(绝对路径) | /html/div/ |
从任意节点开始选取(相对路径) | //div,列举出所有div标签 |
选取当前节点的父节点 | //imput/..会选取imput的父节点 |
选取属性,或者根据属性选取 | |
使用id属性定位 | //div[@id='id_value'] |
使用class属性定位 | //a[@class='manv'] |
使用name属性定位 | //div[@name='wd'] |
多个属性定位 | //input[@name='wd' and @class='s_ipt'] |
第n个属性,使用index定位 | //div[@id='s-top-left']/a[3] |
最后一个元素 | //a@class='mnav' |
属性包含某字段 | //div[contains(@title,'text')] |
属性以某字段开头 | //div[starts-with(@title,'text')] |
属性以某字段结尾 | //div[ends-with(@title,'text')] |
文本包含 | //a[comtains(text(),"网盘")] |
文本等于 | //span[text()=""菜单")] |
同级弟弟元素 | //div[@id=='id']/following-sibliing::div |
同级哥哥元素 | //div[@id=='id']/preceding-sibliing::div |
一个简单的自动化例子
自动打开网址输入账户密码登录新增一条类目。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.select import Select driver = webdriver.Chrome() driver.maximize_window() driver.get('http://sellshop.5istudy.online/sell/user/login_page') # 输入账号 driver.find_element(By.ID, 'username').send_keys('test1') # 输入密码 driver.find_element(By.ID, 'password').send_keys('123456') # 点击登录 driver.find_element(By.XPATH, '//input[@type="submit" and @value="登录"]').click() # 点击新增 driver.find_element(By.CSS_SELECTOR, 'a[href="/sell/seller/product/index"]').click() # 输入名称 driver.find_element(By.NAME, 'productName').send_keys("蛋糕") # 输入价格 driver.find_element(By.NAME, 'productPrice').send_keys("3.4") # 输入库存 driver.find_element(By.NAME, 'productStock').send_keys(1000) # 输入描述 driver.find_element(By.NAME, 'productDescription').send_keys('很好吃') # 输入图片地址 driver.find_element(By.NAME, 'productIcon').send_keys("https://photo.16pic.com/00/19/71/16pic_1971206_b.jpg?imageView2/0/format/jpg") # 选择类目 select = Select(driver.find_element(By.NAME,'catagoryType')) select.select_by_value("23") driver.find_element(By.XPATH,'//button[@type="submit"]').click()