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 弹窗,输入文本后点击确认或取消。
添加 Cookieadd_cookie(cookie_dict)添加指定的 Cookie。
获取 Cookieget_cookie(name)get_cookies()获取指定 Cookie 或所有 Cookies。
删除 Cookiedelete_cookie(name)delete_all_cookies()删除指定 Cookie 或所有 Cookies。
执行 JavaScriptexecute_script(script)执行指定的 JavaScript 代码。
获取 JavaScript 返回值execute_script("return ...")执行 JavaScript 并返回结果。
切换到 iframeswitch_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()

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()

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()

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()

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()

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()

3.2 切换回主页面

在 iframe 中操作完成后,可以使用 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()

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()

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()

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()

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()

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()