1.下拉框选择
如果是select标签下拉框,selenium专门有个类处理;
如果是非select下拉框,就先点击该标签,后选择
代码示例(是select标签)
from selenium.webdriver.support.select import Select
from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("file:///D:/sonQin/pythonProjectSelenimu/day05/test.html")
# 定位到下拉框元素
ele = driver.find_element_by_id("abc")
# # 根据下拉框文本选择(即标签对的文本)
# Select(ele)是实例一个对象,Select是类
# Select(ele).select_by_visible_text("月薪三千")
# # 根据下标选择(从0开始)
# Select(ele).select_by_index(1)
# 根据 value 属性选择,如果没有写value,那就不能这样写
Select(ele).select_by_value("p3")
test.html资源绑定有,如有需要可自行下载,如有疑问,可在评论区留言
2.文件上传
(1)对于通过 input 实现的文件上传,我们可以将其看作是一个输入框
即通过 send_keys 的方式即可实现文件上传
(2)对于非 input 标签实现的上传功能,我们可以通过模拟键盘敲击的方式去实现
通过 input 文件上传的实现,代码示例
from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("https://tinypng.com/")
# 定位到文件上传的 input 标签
ele = driver.find_element_by_css_selector('div[class="u76668p upload-inner"] input[type="file"]')
ele.send_keys("D:\sonQin\pythonProjectSelenimu\day05\ele.png")
运行结果:
通过非 input 文件上传的实现,代码示例
from selenium import webdriver
import win32com.client #如果没有win32com就下载 pip install pypiwin32
import time
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("https://tinypng.com/")
# 定位到文件上传的 input 标签
# ele = driver.find_element_by_css_selector('div[class="u76668p upload-inner"] input[type="file"]')
# ele.send_keys("D:\sonQin\pythonProjectSelenimu\day05\ele.png")
# 对于非 input 标签实现的上传功能,我们通过模拟键盘敲击的方式实现
# 触发文件上传的功能
driver.find_element_by_class_name("desktop").click()
time.sleep(9) #因为这个网页很慢,所以等待时间设置的久点,要不然看不到效果
# 模拟键盘敲击,会不管不顾的敲击,只要代码运行到这里,就敲(所以上面要加等待)
sh = win32com.client.Dispatch("WScript.shell")
sh.Sendkeys("D:\sonQin\pythonProjectSelenimu\day05\ele.png\r\n") #后面的\r\n 是再输入文件名路径后,回车开始上传的一个作用(有的电脑可能是\n)
# 注意:代码运行过程不要操作鼠标
# 输入法要保持英文输入的状态
3.cookie操作与实战
cookie 是服务端存在我们本地客户端的一些信息
并且是不涉及隐私的信息(这个通常要程序员自我约束)
cookie 里边要存哪些内容也不是固定的,完全按照开发者的心意去实现
注意:登录前与登录后所打印的cookie信息可能会不一样
代码示例
import pprint
from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("http://127.0.0.1:8088/")
# 登录一下
driver.find_element_by_name("username").send_keys("libai")
driver.find_element_by_name("password").send_keys("opmsopms123")
driver.find_element_by_css_selector("button").click()
# 获取所有的 cookie(再这里因为前面的代码已经登录了,这是登录后的cookie;登录前和登录后的cookie信息可能有差异)
cookieSli = driver.get_cookies()
pprint.pprint(cookieSli)
# # 根据name,获取某个cookie
# cookie = driver.get_cookie("beegosessionID")
# print(cookie)
把打印出来的内容复制出来,下面的练习会用到
实战练习:
获取登录后的cookie信息,绕过登录的用户名和密码,直接登录(现在的网站,99%应该都规避了这个问题)
代码示例:
from selenium import webdriver
# 创建浏览器驱动对象,这里是打开浏览器
driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
# 访问网址
driver.get("http://127.0.0.1:8088/")
cookieSli= [{'domain': '127.0.0.1',
'httpOnly': False,
'name': 'Hm_lpvt_750463144f16fe69eb3ac11bea1c4436',
'path': '/',
'sameSite': 'Lax',
'secure': False,
'value': '1703573643'},
{'domain': '127.0.0.1',
# 'expiry': 1735109643,#expiry代表超时时间,超时时间是服务设置的
'httpOnly': False,
'name': 'Hm_lvt_750463144f16fe69eb3ac11bea1c4436',
'path': '/',
'sameSite': 'Lax',
'secure': False,
'value': '1703573643'},
{'domain': '127.0.0.1',
# 'expiry': 1735109642,
'httpOnly': True,
'name': 'beegosessionID',
'path': '/',
'sameSite': 'Lax',
'secure': False,
'value': 'e4939e92fa5b3e430d01aa188a46dc56'}]
# 先清除所有的cookie(防止跟浏览器的cookie信息产生冲突)
driver.delete_all_cookies()
for cookie in cookieSli:
# 添加 cookie
driver.add_cookie(cookie)
#刷新页面
driver.refresh()
"""
关于ui自动化登录的问题
1、若权限足够,则申请服务端权限,读取验证码
2、也可以在权限足够的情况下,去修改服务端验证码的值
3、若权限不足,则请开发将测试环境的验证码校验取消(此刻输入任何内容都能通过)
4、测试环境设置一个万能验证码
需要注意的是,第三四种方法,必须在上线后,修正
"""
cookieSli里的内容是从上一段代码中的结果复制粘贴过来的
注意:这里用的url为127.0.0.1:8088的界面,是自己本地开启的一个项目
打开后的项目如下图:
如有需要该项目的资源,可自行下载,下载链接如下: