跳转至

Python的selenium包

Selenium 是一个广泛使用的自动化测试工具,它可以驱动浏览器执行各种操作,如打开网页、点击按钮、输入文本等。Selenium 支持多种编程语言,其中 Python 是常用的语言之一。

以下是详细介绍 Python Selenium 及其所有主要方法。

1. 安装 Selenium

首先,使用 pip 安装 Selenium:

pip install selenium

此外,如果使用 Chrome 浏览器,需要安装 ChromeDriver(或其他浏览器驱动,例如 GeckoDriver for Firefox):

# Example for Ubuntu/Debian
sudo apt-get install chromedriver

或者从 ChromeDriver 官方网站 下载适合你操作系统的版本。

2. 基本使用

2.1. 导入库和启动浏览器

from selenium import webdriver

# 初始化 WebDriver(以 Chrome 为例)
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# 打开一个网页
driver.get("https://www.example.com")

2.2. 基本浏览器操作方法

  • get(url): 打开指定的 URL。
driver.get("https://www.example.com")
  • current_url: 获取当前页面的 URL。
print(driver.current_url)
  • title: 获取当前页面的标题。
print(driver.title)
  • page_source: 获取当前页面的 HTML 源代码。
print(driver.page_source)
  • close(): 关闭当前窗口。
driver.close()
  • quit(): 关闭所有窗口并结束 WebDriver 会话。
driver.quit()

3. 元素定位与操作

Selenium 提供多种方式来查找和操作网页元素。

3.1. 定位元素的方法

  • find_element(By.ID, "id"): 通过 id 查找元素。
from selenium.webdriver.common.by import By
element = driver.find_element(By.ID, "element_id")
  • find_element(By.NAME, "name"): 通过 name 查找元素。
element = driver.find_element(By.NAME, "element_name")
  • find_element(By.XPATH, "xpath"): 通过 XPath 查找元素。
element = driver.find_element(By.XPATH, "//tagname[@attribute='value']")
  • find_element(By.CSS_SELECTOR, "css_selector"): 通过 CSS 选择器查找元素。
element = driver.find_element(By.CSS_SELECTOR, "div.classname")
  • find_element(By.CLASS_NAME, "class_name"): 通过类名查找元素。
element = driver.find_element(By.CLASS_NAME, "classname")
  • find_element(By.TAG_NAME, "tag_name"): 通过标签名查找元素。
element = driver.find_element(By.TAG_NAME, "tagname")
  • find_element(By.LINK_TEXT, "link_text"): 通过链接文本查找元素。
element = driver.find_element(By.LINK_TEXT, "Link Text")
  • find_element(By.PARTIAL_LINK_TEXT, "partial_link_text"): 通过部分链接文本查找元素。
element = driver.find_element(By.PARTIAL_LINK_TEXT, "Partial Link Text")

3.2. 操作元素的方法

  • click(): 点击元素。
element = driver.find_element(By.ID, "submit_button")
element.click()
  • send_keys("text"): 向元素输入文本。
element = driver.find_element(By.NAME, "username")
element.send_keys("my_username")
  • clear(): 清除文本框中的内容。
element = driver.find_element(By.NAME, "username")
element.clear()
  • text: 获取元素的文本。
element = driver.find_element(By.ID, "message")
print(element.text)
  • get_attribute("attribute_name"): 获取元素的属性值。
element = driver.find_element(By.ID, "submit_button")
print(element.get_attribute("type"))
  • is_displayed(): 检查元素是否显示在页面上。
element = driver.find_element(By.ID, "submit_button")
print(element.is_displayed())
  • is_enabled(): 检查元素是否可用。
element = driver.find_element(By.ID, "submit_button")
print(element.is_enabled())
  • is_selected(): 检查元素是否被选中(通常用于复选框和单选按钮)。
element = driver.find_element(By.ID, "checkbox")
print(element.is_selected())

3.3. 处理多元素

  • find_elements(By.METHOD, "value"): 返回匹配的所有元素列表。
elements = driver.find_elements(By.CLASS_NAME, "classname")
for element in elements:
    print(element.text)

4. 处理浏览器窗口和框架

4.1. 处理多个窗口

  • window_handles: 获取当前浏览器会话中的所有窗口句柄。
handles = driver.window_handles
  • switch_to.window(handle): 切换到指定的窗口。
driver.switch_to.window(handles[1])

4.2. 处理框架(iframe)

  • switch_to.frame(frame_reference): 切换到指定的框架。
driver.switch_to.frame("frame_name")
  • switch_to.default_content(): 切换回主文档。
driver.switch_to.default_content()

5. 处理弹出框和对话框

5.1. 警告框(Alert)

  • switch_to.alert: 获取当前页面的弹出框。
alert = driver.switch_to.alert
  • alert.accept(): 接受警告框。
alert.accept()
  • alert.dismiss(): 取消警告框。
alert.dismiss()
  • alert.send_keys("text"): 在警告框的输入框中输入文本。
alert.send_keys("my_text")
  • alert.text: 获取警告框的文本。
print(alert.text)

6. 处理下拉菜单

  • Select(driver.find_element(By.METHOD, "value")): 实例化一个 Select 对象。
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element(By.ID, "dropdown"))
  • select.select_by_visible_text("text"): 通过可见文本选择选项。
select.select_by_visible_text("Option 1")
  • select.select_by_value("value"): 通过值选择选项。
select.select_by_value("option1")
  • select.select_by_index(index): 通过索引选择选项。
select.select_by_index(1)

7. 等待

7.1. 显式等待(Explicit Waits)

使用 WebDriverWait 等待某个条件成立(如元素可见)。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "my_element"))
)

常见的条件有:

  • presence_of_element_located(locator): 元素加载到DOM中。
  • visibility_of_element_located(locator): 元素可见。
  • element_to_be_clickable(locator): 元素可点击。

7.2. 隐式等待(Implicit Waits)

设置隐式等待时间,在查找元素时,如果元素没有立即出现,WebDriver将等待一定时间再继续。

driver.implicitly_wait(10)  # 设置10秒等待时间

8. Cookies 管理

  • get_cookies(): 获取所有 cookies。
cookies = driver.get_cookies()
print(cookies)
  • get_cookie(name): 获取指定名称的 cookie。
cookie = driver.get_cookie("my_cookie")
print(cookie)
  • add_cookie(cookie_dict): 添加一个 cookie。
driver.add_cookie({"name": "my_cookie", "value": "cookie_value"})
  • delete_cookie(name): 删除指定名称的 cookie。
driver.delete_cookie("my_cookie")
  • delete_all_cookies(): 删除所有 cookies。
driver.delete_all_cookies()

9. JavaScript 执行

  • execute_script(script, *args): 执行 JavaScript 脚本。
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

10. 文件上传

使用 send_keys 方法模拟文件上传:

element = driver.find_element(By.ID, "file_upload")
element.send_keys("/path/to/yourfile.txt")

11. 浏览器前进和后退

  • forward(): 浏览器前进。
driver.forward()
  • back(): 浏览器后退。
driver.back()

12. 截屏

  • save_screenshot(file_path): 保存当前页面的截图。
driver.save_screenshot('screenshot.png')
  • get_screenshot_as_file(filename): 以文件形式获取截图。
driver.get_screenshot_as_file("screenshot.png")

13. 窗口管理

  • maximize_window(): 最大化窗口。
driver.maximize_window()
  • minimize_window(): 最小化窗口。
driver.minimize_window()
  • set_window_size(width, height): 设置窗口大小。
driver.set_window_size(1024, 768)
  • get_window_size(): 获取窗口大小。
size = driver.get_window_size()
print(size)

14. 关闭和退出

  • close(): 关闭当前窗口。
driver.close()
  • quit(): 关闭所有窗口并结束 WebDriver 会话。
driver.quit()

通过掌握以上 Selenium 方法,您可以自动化大多数 Web 操作,并创建功能强大的自动化测试脚本。

评论