Selenium 浏览器操作
Selenium 不仅可以操作网页元素,还可以控制浏览器本身的行为,例如管理窗口、处理弹窗、操作 Cookies、执行 JavaScript 等。
以下是 Selenium 中常用的浏览器操作及其说明:
操作类型 | 方法 | 说明 |
---|---|---|
打开新窗口 | execute_script("window.open('URL');") | 使用 JavaScript 打开新窗口。 |
切换窗口 | switch_to.window(window_handle) | 切换到指定的窗口句柄。 |
关闭窗口 | close() | 关闭当前窗口。 |
最大化窗口 | maximize_window() | 最大化浏览器窗口。 |
设置窗口大小 | set_window_size(width, height) | 设置浏览器窗口的大小。 |
全屏模式 | fullscreen_window() | 将浏览器窗口设置为全屏模式。 |
打开网页 | get(url) | 打开指定的 URL。 |
前进和后退 | back() 和 forward() | 返回上一个页面或前进到下一个页面。 |
刷新页面 | refresh() | 刷新当前页面。 |
处理 Alert 弹窗 | switch_to.alert 结合 accept() 或 dismiss() | 处理 Alert 弹窗,点击确认或取消。 |
处理 Confirm 弹窗 | switch_to.alert 结合 accept() 或 dismiss() | 处理 Confirm 弹窗,点击确认或取消。 |
处理 Prompt 弹窗 | switch_to.alert 结合 send_keys() 和 accept() 或 dismiss() | 处理 Prompt 弹窗,输入文本后点击确认或取消。 |
添加 Cookie | add_cookie(cookie_dict) | 添加指定的 Cookie。 |
获取 Cookie | get_cookie(name) 或 get_cookies() | 获取指定 Cookie 或所有 Cookies。 |
删除 Cookie | delete_cookie(name) 或 delete_all_cookies() | 删除指定 Cookie 或所有 Cookies。 |
执行 JavaScript | execute_script(script) | 执行指定的 JavaScript 代码。 |
获取 JavaScript 返回值 | execute_script("return ...") | 执行 JavaScript 并返回结果。 |
切换到 iframe | switch_to.frame(iframe_element) | 切换到指定的 iframe。 |
切换回主页面 | switch_to.default_content() | 切换回主页面。 |
1. 处理浏览器弹窗(alert、confirm、prompt)
在 Web 应用程序中,弹窗(如 alert、confirm、prompt)是常见的用户交互方式。Selenium 提供了 Alert
类来处理这些弹窗。
1.1 处理 alert 弹窗
alert
弹窗通常用于显示一条消息,用户只能点击"确定"按钮关闭弹窗。
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.alert import Alert
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 触发 alert 弹窗
driver.execute_script("alert('这是一个 alert 弹窗');")
# 切换到 alert 弹窗
alert = Alert(driver)
# 获取弹窗文本
print(alert.text)
# 点击"确定"按钮关闭弹窗
alert.accept()
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.alert import Alert
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 触发 alert 弹窗
driver.execute_script("alert('这是一个 alert 弹窗');")
# 切换到 alert 弹窗
alert = Alert(driver)
# 获取弹窗文本
print(alert.text)
# 点击"确定"按钮关闭弹窗
alert.accept()
# 关闭浏览器
driver.quit()
1.2 处理 confirm 弹窗
confirm
弹窗通常用于确认操作,用户可以选择"确定"或"取消"。
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.alert import Alert
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 触发 confirm 弹窗
driver.execute_script("confirm('这是一个 confirm 弹窗');")
# 切换到 confirm 弹窗
alert = Alert(driver)
# 获取弹窗文本
print(alert.text)
# 点击"确定"按钮
alert.accept()
# 或者点击"取消"按钮
# alert.dismiss()
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.alert import Alert
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 触发 confirm 弹窗
driver.execute_script("confirm('这是一个 confirm 弹窗');")
# 切换到 confirm 弹窗
alert = Alert(driver)
# 获取弹窗文本
print(alert.text)
# 点击"确定"按钮
alert.accept()
# 或者点击"取消"按钮
# alert.dismiss()
# 关闭浏览器
driver.quit()
1.3 处理 prompt 弹窗
prompt
弹窗通常用于获取用户输入,用户可以输入文本并选择"确定"或"取消"。
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.alert import Alert
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 启动浏览器
driver = webdriver.Chrome()
# 打开网页
driver.get("https://example.com")
# 触发 prompt 弹窗
driver.execute_script("prompt('这是一个 prompt 弹窗');")
# 切换到 prompt 弹窗
alert = Alert(driver)
# 获取弹窗文本
print(alert.text)
# 输入文本
alert.send_keys("用户输入")
# 点击"确定"按钮
alert.accept()
# 或者点击"取消"按钮
# alert.dismiss()
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.alert import Alert
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 启动浏览器
driver = webdriver.Chrome()
# 打开网页
driver.get("https://example.com")
# 触发 prompt 弹窗
driver.execute_script("prompt('这是一个 prompt 弹窗');")
# 切换到 prompt 弹窗
alert = Alert(driver)
# 获取弹窗文本
print(alert.text)
# 输入文本
alert.send_keys("用户输入")
# 点击"确定"按钮
alert.accept()
# 或者点击"取消"按钮
# alert.dismiss()
# 关闭浏览器
driver.quit()
2. 切换窗口和标签页
在 Web 应用程序中,用户可能会打开多个窗口或标签页。Selenium 提供了 switch_to.window()
方法来切换窗口或标签页。
2.1 切换窗口
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开第一个窗口
driver.get("https://example.com")
# 打开第二个窗口
driver.execute_script("window.open('https://example.org');")
# 获取所有窗口句柄
window_handles = driver.window_handles
# 切换到第二个窗口
driver.switch_to.window(window_handles[1])
# 在第二个窗口中操作
print(driver.title)
# 切换回第一个窗口
driver.switch_to.window(window_handles[0])
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开第一个窗口
driver.get("https://example.com")
# 打开第二个窗口
driver.execute_script("window.open('https://example.org');")
# 获取所有窗口句柄
window_handles = driver.window_handles
# 切换到第二个窗口
driver.switch_to.window(window_handles[1])
# 在第二个窗口中操作
print(driver.title)
# 切换回第一个窗口
driver.switch_to.window(window_handles[0])
# 关闭浏览器
driver.quit()
2.2 切换标签页
切换标签页与切换窗口类似,因为每个标签页都是一个独立的窗口句柄。
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开第一个标签页
driver.get("https://example.com")
# 打开第二个标签页
driver.execute_script("window.open('https://example.org');")
# 获取所有标签页句柄
tab_handles = driver.window_handles
# 切换到第二个标签页
driver.switch_to.window(tab_handles[1])
# 在第二个标签页中操作
print(driver.title)
# 切换回第一个标签页
driver.switch_to.window(tab_handles[0])
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开第一个标签页
driver.get("https://example.com")
# 打开第二个标签页
driver.execute_script("window.open('https://example.org');")
# 获取所有标签页句柄
tab_handles = driver.window_handles
# 切换到第二个标签页
driver.switch_to.window(tab_handles[1])
# 在第二个标签页中操作
print(driver.title)
# 切换回第一个标签页
driver.switch_to.window(tab_handles[0])
# 关闭浏览器
driver.quit()
3. 处理 iframe
iframe
是嵌入在网页中的另一个网页。Selenium 提供了 switch_to.frame()
方法来切换到 iframe。
3.1 切换到 iframe
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 切换到 iframe
iframe = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)
# 在 iframe 中操作
print(driver.page_source)
# 切换回主页面
driver.switch_to.default_content()
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 切换到 iframe
iframe = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)
# 在 iframe 中操作
print(driver.page_source)
# 切换回主页面
driver.switch_to.default_content()
# 关闭浏览器
driver.quit()
3.2 切换回主页面
在 iframe 中操作完成后,可以使用 switch_to.default_content()
方法切换回主页面。
实例
# 切换回主页面
driver.switch_to.default_content()
driver.switch_to.default_content()
4. 浏览器 Cookies 操作
Selenium 提供了 get_cookies()
、add_cookie()
、delete_cookie()
等方法来操作浏览器的 Cookies。
4.1 获取 Cookies
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 获取所有 Cookies
cookies = driver.get_cookies()
print(cookies)
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 获取所有 Cookies
cookies = driver.get_cookies()
print(cookies)
# 关闭浏览器
driver.quit()
4.2 添加 Cookie
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 添加 Cookie
driver.add_cookie({"name": "test", "value": "123"})
# 获取所有 Cookies
cookies = driver.get_cookies()
print(cookies)
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 添加 Cookie
driver.add_cookie({"name": "test", "value": "123"})
# 获取所有 Cookies
cookies = driver.get_cookies()
print(cookies)
# 关闭浏览器
driver.quit()
4.3 删除 Cookie
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 添加 Cookie
driver.add_cookie({"name": "test", "value": "123"})
# 删除 Cookie
driver.delete_cookie("test")
# 获取所有 Cookies
cookies = driver.get_cookies()
print(cookies)
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 添加 Cookie
driver.add_cookie({"name": "test", "value": "123"})
# 删除 Cookie
driver.delete_cookie("test")
# 获取所有 Cookies
cookies = driver.get_cookies()
print(cookies)
# 关闭浏览器
driver.quit()
5. 执行 JavaScript 代码
Selenium 提供了 execute_script()
方法来执行 JavaScript 代码。
5.1 执行 JavaScript 代码
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 执行 JavaScript 代码
driver.execute_script("alert('这是一个 JavaScript 弹窗');")
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 执行 JavaScript 代码
driver.execute_script("alert('这是一个 JavaScript 弹窗');")
# 关闭浏览器
driver.quit()
5.2 获取 JavaScript 返回值
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 执行 JavaScript 代码并获取返回值
result = driver.execute_script("return document.title;")
print(result)
# 关闭浏览器
driver.quit()
from selenium.webdriver.chrome.service import Service as ChromeService
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://example.com")
# 执行 JavaScript 代码并获取返回值
result = driver.execute_script("return document.title;")
print(result)
# 关闭浏览器
driver.quit()
6. 综合示例
以下是一个完整的示例,展示如何使用多种浏览器操作:
实例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 设置正确的驱动路径
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 打开网页
driver.get("https://www.example.com")
# 最大化窗口
driver.maximize_window()
# 添加 Cookie
driver.add_cookie({"name": "test", "value": "123"})
# 获取 Cookie
cookie = driver.get_cookie("test")
print("Cookie:", cookie)
# 执行 JavaScript
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 处理 Alert 弹窗
driver.execute_script("alert('Hello, Selenium!');")
alert = driver.switch_to.alert
print("弹窗文本:", alert.text)
alert.accept()
# 切换到 iframe
iframe = driver.find_element(By.ID, "iframe-id")
driver.switch_to.frame(iframe)
# 切换回主页面
driver.switch_to.default_content()
# 关闭浏览器
driver.quit()
点我分享笔记