1.下拉列表
笔记在代码内
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
driver=webdriver.Edge()
url = r"D:\资料\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册实例.html"
driver.get(url)
driver.implicitly_wait(10)
# 下拉列表的标签是select
# 方式一(有不同的value值的话一般用这个)
# driver.find_element(By.CSS_SELECTOR,"[value='sh']").click()
# sleep(2)
# driver.find_element(By.CSS_SELECTOR,"[value='bj']").click()
# sleep(2)
# 方式二(当value值无法定位时,用这个更方便)
# 定位select
el=driver.find_element(By.CSS_SELECTOR,"#select")
sleep(2)
# 导Select包
# 通过index来访问
Select(el).select_by_index(1)
sleep(2)
Select(el).select_by_index(2)
sleep(2)
# 通过value值访问
Select(el).select_by_value("sh")
sleep(2)
# 通过文本显示
Select(el).select_by_visible_text("上海")
sleep(2)
driver.quit()
测试结果如图
2.弹出框
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
driver=webdriver.Edge()
url = r"D:\资料\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册实例.html"
driver.get(url)
driver.implicitly_wait(10)
# 有三种弹出框:alert警告框,confirm确认框,prompt提示框
# 以下为警告框,其他的框也是一样的方法
# 定位alert按钮,
driver.find_element(By.CSS_SELECTOR,"#alert").click()
# 弹出警告框
# 在弹出三种框后都必须处理,不然无法进行下一步操作
at=driver.switch_to.alert
# 其他框也具有accept同意,text获取文本,dismiss取消方法
# 同意
# at.accept()
# 获取文本,即警告的信息
print("警告信息:",at.text)
# 取消
at.dismiss()
sleep(2)
driver.quit()
3.滚动条
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
driver=webdriver.Edge()
url = r"D:\资料\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册实例.html"
driver.get(url)
driver.implicitly_wait(10)
# selenium中没有直接提供定位滚动条的方法,它提供了执行js语句方法
# 有些操作只有滚动条拉到最底才有指定按钮可用
# 设置滚动条:
js="window.scrollTo(0,1000)"
# 执行:
driver.execute_script(js)
sleep(2)
driver.quit()
4.表单
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Edge()
url = r"D:\资料\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册实例.html"
driver.get(url)
driver.implicitly_wait(10)
# 使用的黑马程序员的案例
# 主页面
driver.find_element(By.CSS_SELECTOR, "#user").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, "#password").send_keys("admin")
# 电话
driver.find_element(By.CSS_SELECTOR, ".tel").send_keys("18611112222")
# 邮件
driver.find_element(By.CSS_SELECTOR, "#email").send_keys("123@qq.com")
sleep(2)
# 切换到注册A表单
# 切换表单时,可以使用其id、name、iframe元素
# 使用name
driver.switch_to.frame("myframe1")
# # 使用id
# driver.switch_to.frame("idframe1")
# # 使用属性
# driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR,"[name='myframe1']"))
# A表单
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, "#passwordA").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, ".telA").send_keys("18611112222")
driver.find_element(By.CSS_SELECTOR, "#emailA").send_keys("123@qq.com")
sleep(2)
# 注意:由于切换到了A表单,A表单内没有frame表单元素,故无法切换,导致无法定位
# 解决方法:切换到默认目录,然后再切换到B表单
# 恢复默认主页
driver.switch_to.default_content()
# B表单
driver.switch_to.frame("myframe2")
driver.find_element(By.CSS_SELECTOR, "#userB").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, "#passwordB").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, ".telB").send_keys("18611112222")
driver.find_element(By.CSS_SELECTOR, "#emailB").send_keys("123@qq.com")
sleep(2)
driver.quit()
# driver.switch_to.frame("myframe1")这个切换表单的方法与弹出框相似driver.switch_to.alert
5.多窗口
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Edge()
url = r"D:\资料\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册实例.html"
driver.get(url)
driver.implicitly_wait(10)
current_handle = driver.current_window_handle
print("获取当前窗口句柄", current_handle)
sleep(2)
# 打开初始目录中的”A网页“链接
driver.find_element(By.PARTIAL_LINK_TEXT, "A网页").click()
sleep(2)
handles = driver.window_handles
print("获取所有窗口句柄", handles)
# 判断不是当前网页句柄
for handle in handles:
if handle != current_handle:
# 切换定位窗口
driver.switch_to.window(handle)
# driver.switch_to是专门处理这一类的事物,如弹出框、切换表单和切换网页
# A表单
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, "#passwordA").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, ".telA").send_keys("18611112222")
driver.find_element(By.CSS_SELECTOR, "#emailA").send_keys("123@qq.com")
sleep(2)
sleep(2)
driver.quit()
6.截屏
import time
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Edge()
url = r"D:\资料\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册实例.html"
driver.get(url)
driver.implicitly_wait(10)
driver.find_element(By.CSS_SELECTOR, "#user").send_keys("admin")
# 动态获取文件名,使用时间戳
# get_screenshot_as_file()为截屏方法,time.strftime()为时间戳,注意时间戳中的大小写
# ../image/%s.png为设置存储地址
driver.get_screenshot_as_file("../image/%s.png"%(time.strftime("%Y_%m_%d_%H_%M_%S")))
sleep(2)
driver.quit()
7.验证码
driver.add_cookie()中的BDUSS要去百度通过控制台中的Network内获取它的value,然后将值通过健子对的形式写入
import time
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
# 三种方法add_cookie,get_cookies,get_cookie
driver = webdriver.Edge()
url = "https://www.baidu.com/"
driver.get(url)
driver.implicitly_wait(10)
driver.maximize_window()
# 在关闭浏览器后cookie的值会改变
# 用字典类型
driver.add_cookie({"name": "BDUSS","value": "VOeTFSck1rVm5jeXRXbHpDRHRiR1k5ZmVaMk1oUFhqaXJSQUdJWXlvZWtoZTVtSVFBQUFBJCQAAAAAAQAAAAEAAAAWzVZSY2hlbmd6aGVuZ"})
# 获取所有cookie值
coo = driver.get_cookies()
print(coo)
for co in coo:
print(co)
# 获取name为BDUSS的cookie(get_cookie方法是基于get_cookies方法的,相当于在cookies中找BDUSS)
# coo=driver.get_cookie("BDUSS")
# print(coo)
sleep(2)
driver.refresh()
# 验证码很有必要,它可以防止恶意请求
# 但Selenium中没有对验证码处理方法
# 所以在测试的时候我们有四种方法可以选择,
# 分别是1.去掉验证码,
# 2.设置万能验证码,
# 3.使用验证码识别技术,
# 4.使用cookie解决(最优)
# 浏览器有了cookie记录后,可以跳过登录直接访问,直到cookie过期(cookie不禁用)
sleep(3)
driver.quit()