本文涉及的基础知识点为:窗口切换及IFrame切换、警告框的操作、下拉框的操作、悬浮框的操作、三种等待方式以及文件的上传与下载。
1.窗口切换以及IFrame
1.1窗口切换
rom selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
browser = webdriver.Firefox()
browser.maximize_window()
browser.get('https://www.runoob.com/html/html-basic.html')
# 点击 链接 下的第三个 尝试一下
browser.find_element(By.CSS_SELECTOR, 'div.example:nth-child(18) > a:nth-child(4)').click()
sleep(2)
# 1.切换窗口
# 定义一个handles用于获取窗口的句柄值
handles = browser.window_handles
# 按照句柄的下标来选择窗口(从0开始)
# 切换至第二个窗口
browser.switch_to.window(handles[1])
# browser.switch_to_window()
print("第二个网页的标题是:",browser.title) # 打印当前窗口的标题
sleep(2)
1.2 IFrame (千万不要忘了切回主布局页面)
# 2.切换frame
# 切换到子页面
browser.switch_to.frame('iframeResult')
# 点击 链接 这是一个链接使用了 href 属性
browser.find_element(By.LINK_TEXT, '这是一个链接使用了 href 属性').click()
# NoSuchElementException 没有此元素异常
sleep(2)
# 切换回主页面
browser.switch_to.default_content()
browser.quit()
2.警告框
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
browser = webdriver.Firefox()
browser.maximize_window()
browser.get('https://www.runoob.com/try/try.php?filename=tryjs_alert')
browser.switch_to.frame('iframeResult')
browser.find_element(By.XPATH, '/html/body/input').click()
sleep(3)
# 对非页面元素的警告框操作
browser.switch_to.alert.accept() # 点击 确定
# browser.switch_to.alert.dismiss() # 点击 取消
browser.switch_to.default_content()
browser.quit()
4.下拉框
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
browser = webdriver.Firefox()
browser.maximize_window()
browser.get('https://www.runoob.com/try/try.php?filename=tryhtml_select2')
browser.switch_to.frame('iframeResult')
# 定位下拉框
select_element = browser.find_element(By.NAME,'cars')
# is_selected()判断元素是否被选中
if not select_element.is_selected():
select_element.click()
# 按value属性选择
Select(select_element).select_by_value('saab')
sleep(2)
# 按可见文本选择
Select(select_element).select_by_visible_text('Fiat')
sleep(2)
# 按索引值选择(从0开始)
Select(select_element).select_by_index(3)
sleep(2)
browser.switch_to.default_content()
browser.quit()
5.悬浮框
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
browser = webdriver.Firefox()
browser.maximize_window()
browser.get('https://www.baidu.com')
# 先定位到 更多
more = browser.find_element(By.NAME,'tj_briicon')
# 悬浮
ActionChains(browser).move_to_element(more).perform()
time.sleep(3)
# 点击音乐
browser.find_element(By.NAME,'tj_mp3').click()
time.sleep(3)
browser.quit()
6.三种等待方式
强制等待: sleep(等待时长) 单位s
显式等待: WebDriverWait(浏览器,最大等待时长,间隔时间)
隐式等待: implicitly_wait(最大等待时间)单位s 作用于整个脚本
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
import time
# 隐式等待
browser = webdriver.Firefox()
browser.maximize_window()
browser.get('https://www.baidu.com')
browser.implicitly_wait(10) # (最大等待时长 单位s) 作用于整个脚本
browser.find_element(By.LINK_TEXT,'新闻').click()
browser.quit()
# 显式等待
browser = webdriver.Firefox()
browser.maximize_window()
browser.get('https://www.baidu.com')
WebDriverWait(browser,10,2).until(expected_conditions.presence_of_element_located((By.ID,'kw1')))
# 此处会报错:TimeoutException 超时异常
browser.find_element(By.ID,'kw').send_keys('CSDN_AloofXu')
time.sleep(1)
browser.quit()
7.文件的上传与下载
7.1.文件的上传(本质上就是定位元素后后send_keys)
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 文件上传
firefox = webdriver.Firefox()
firefox.maximize_window()
firefox.get('http://www.sahitest.com/demo/php/fileUpload.htm')
firefox.find_element(By.ID,'file').send_keys('C:\\Users\\Administrator\\Desktop\\1.txt')
sleep(2)
firefox.quit()
7.2.文件的下载
知识点:
① browser.download.folderList 用于设置下载路径(1默认 2自定义)
②browser.download.dir ,路径 设置具体下载路径
③browser.download.manager.showWhenStarting,False 设置是否显示下载器 不显示
④browser.helperApps.neverAsk.saveToDisk,文件格式 设置无需弹窗提醒 设置下载文件格式
具体使用看下面代码:
# 文件下载
# 设置浏览器的下载参数
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.folderList',2) # 设置下载路径(1默认 2自定义)
profile.set_preference('browser.download.dir','D:\\') # 设置具体下载盘 D盘根目录
profile.set_preference('browser.download.manager.showWhenStarting',False) # 设置是否显示下载器 不显示
profile.set_preference('browser.helperApps.neverAsk.saveToDisk','application/zip') # 无需弹窗提醒 文件下载格式为zip
firefox = webdriver.Firefox(firefox_profile=profile) # 使用上面设置的新设置打开浏览器
# firefox = webdriver.Firefox(options=profile)
firefox.maximize_window()
firefox.get('http://sahitest.com/demo/saveAs.htm')
firefox.find_element(By.LINK_TEXT,'testsaveas.zip').click()
sleep(2)
firefox.quit()
Enjoy!!!