配置环境:
1. pycharm安装selenium
pip install selenium
2. 安装浏览器驱动,放到python.exe同目录下;寻找和浏览器版本相近的(这里用的谷歌)
https://chromedriver.storage.googleapis.com/index.html
selenium八大元素定位方法:
前提: 需要定位的元素或它的属性必须是唯一
八大元素:
id
name
xpath
css
link_text
partail_link_text
class_name
tag_name
from selenium import webdriver
from selenium.webdriver.common.by import By
# 获取驱动
driver = webdriver.Chrome()
# 加载网页
driver.get("http://www.baidu.com")
# 定位元素(利于封装)
# id定位
# driver.find_element(By.ID, "kw").send_keys("英汉互译")
# name 属性
# driver.find_element(By.NAME, "wd").send_keys("英汉互译")
# 超链接文本
# driver.find_element(By.LINK_TEXT, "新闻").click()
# 超链接部分文本
# driver.find_element(By.PARTIAL_LINK_TEXT, "闻").click()
# xpath: 复制xpath经常会出错,不是万能的
'''
绝对路径: /开头是绝对路径
/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input
相对路径: //开头是相对路径
//input
1. 相对路径 + 索引
一直向上找到一个唯一元素: //form/span[1]/input
2. 相对路径 + 属性定位
标签 + [@属性=属性值]: //input[@autocomplete="off"]
标签 + [@属性=属性值 and / or @属性=属性值]
3. 相对路径 + 通配符定位: *
在网页搜索所有的标签里搜索这个属性,属性必须唯一: //*[@autocomplete="off"]
或者把属性名也给成通配符,属性值必须为唯一: //*[@*="off"]
4. 相对路径 + 部分属性值定位
属性值以什么开头: //*[starts-with(@autocomplete,'of')]
截取属性值(从第二个开始到最后): //*[substring(@autocomplete,2)='ff']
属性值包含: //*[contains(@autocomplete,'o')]
5. 相对路径 + 文本定位 ,不是超链接的文本可以使用:
全部文本: //span[text()="按图片搜索"]
部分文本: //span[contains(text(),"图片搜索")]
'''
# css定位
'''
1. 绝对路径: 也是根元素开始,中间空格间隔
2. 通过id和class定位
3. 通过属性定位
4. 通过部分属性定位
5. 查询子元素定位
6. 查询兄弟节点定位
'''
# 特殊元素:
1. 有些元素是不可见的: div :style="display:none"
2. 有些元素是隐藏的 : hidden
3. 有些元素是不可用的 : disables=disabled 灰色
4. 有些元素是不可编辑的 : readonly=readonly
.....
# 特殊场景:
1. frame /iframe 的场景
2. 元素完全一样
3. 多个窗口
.....
selenium操作:
send_keys("英汉互译") # 输入
click() # 点击
get_attribute("class") # 获取属性值
selenium原生方法:
1. 框架:
frameset: 框架集(忽略)
frame(框架)
iframe(框架)
进入框架
driver.switch_to.frame("main_workspace") # 框架name值
# 出框架
driver.switch_to.default_content()
2. 下拉框
# 第一步定位到下拉框元素
# 第二步转换为Select
sel = Select(driver.find_element(By.NAME, "businessStyle"))
# 第三步,定位下拉框元素
sel.select_by_value("1") # 根据value定位(推荐)
# sel.select_by_visible_text("自营") # 根据文本定位
# sel.select_by_index("1") # 根据下标选中
3. 文件上传
# 1. 先定位
# 2. 在send_keys里加上文件路径:send_keys(r"D:/123.png")
4.处理弹窗:alert(只有确定);confirm(确定/取消);prompt(确定/取消/输入)
ale= driver.switch_to.alert
ale.dismiss() # 取消
ale.text # 获取弹窗文本
ale.accept() # 点击确定
ale.send_keys("") # 输入