web自动化之基础内容五(全网最详细,下拉框选择,文件上传,cookie操作与实战)-第五天

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的界面,是自己本地开启的一个项目

打开后的项目如下图:

如有需要该项目的资源,可自行下载,下载链接如下:

https://download.csdn.net/download/weixin_42242910/88947814

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布凡哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值