马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Selenium 是一个强盛的 Web 自动化工具,支持多种欣赏器和语言绑定。
1. Selenium 的根本概念
- WebDriver:Selenium 提供的焦点接口,用于控制欣赏器操纵。
- 显式期待:期待特定条件满足后再实行操纵。
- 隐式期待:全局设置一个期待时间,针对全部操纵收效。
- 定位器(Locators):用于定位页面元素的方法,如 ID、XPath、CSS 选择器等。
2. Selenium 的重要模块及 API
2.1 WebDriver
WebDriver 是 Selenium 的焦点,用于与欣赏器举行交互。
2.1.1 初始化欣赏器
- from selenium import webdriver
- # 启动 Chrome 浏览器
- driver = webdriver.Chrome()
- # 打开指定网址
- driver.get("https://www.example.com")
- # 最大化窗口
- driver.maximize_window()
- # 关闭浏览器
- driver.quit()
复制代码 2.1.2 欣赏器导航- driver.get("https://www.example.com") # 打开网址
- driver.back() # 后退
- driver.forward() # 前进
- driver.refresh() # 刷新页面
复制代码 2.2 定位元素
Selenium 提供多种方法来定位网页中的元素:
2.2.1 利用 find_element 和 find_elements
- from selenium.webdriver.common.by import By
- # 定位单个元素
- element = driver.find_element(By.ID, "element_id")
- # 定位多个元素
- elements = driver.find_elements(By.CLASS_NAME, "class_name")
复制代码 2.2.2 常用定位器
定位器用法示例IDdriver.find_element(By.ID, "element_id")Namedriver.find_element(By.NAME, "name")Classdriver.find_element(By.CLASS_NAME, "class")Tagdriver.find_element(By.TAG_NAME, "tag")CSSdriver.find_element(By.CSS_SELECTOR, ".class")XPathdriver.find_element(By.XPATH, "//tag[@attr='value']") 2.3 操纵页面元素
2.3.1 输入内容
- element = driver.find_element(By.ID, "username")
- element.send_keys("test_user")
复制代码 2.3.2 点击按钮
- button = driver.find_element(By.ID, "submit_button")
- button.click()
复制代码 2.3.3 清空输入框
- input_field = driver.find_element(By.ID, "input_field")
- input_field.clear()
复制代码 2.3.4 获取元素属性
- element = driver.find_element(By.ID, "logo")
- print(element.get_attribute("src"))
复制代码 2.3.5 获取元素文本
- element = driver.find_element(By.ID, "welcome_message")
- print(element.text)
复制代码 2.4 期待
Selenium 提供显式期待和隐式期待来处置处罚动态加载页面。
2.4.1 隐式期待
隐式期待是全局设置,期待元素加载完成。- driver.implicitly_wait(10) # 全局等待 10 秒
复制代码 2.4.2 显式期待
显式期待针对特定元素或条件设置。- 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.visibility_of_element_located((By.ID, "element_id"))
- )
复制代码 2.4.3 常用条件
条件形貌presence_of_element_located元素出如今 DOM 中,但不肯定可见。visibility_of_element_located元素出如今 DOM 且可见。element_to_be_clickable元素可点击。url_changes页面 URL 发生变革。alert_is_present弹窗出现。 2.5 页面操纵
2.5.1 窗口操纵
- # 获取当前窗口句柄
- current_window = driver.current_window_handle
- # 获取所有窗口句柄
- all_windows = driver.window_handles
- # 切换到新窗口
- driver.switch_to.window(all_windows[1])
复制代码 2.5.2 iframe 切换
- # 切换到 iframe
- driver.switch_to.frame("iframe_name")
- # 返回主页面
- driver.switch_to.default_content()
复制代码 2.5.3 滚动页面
- # 滚动到页面底部
- driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
复制代码 2.6 Cookie 和 JavaScript
2.6.1 操纵 Cookie
- # 获取所有 Cookies
- print(driver.get_cookies())
- # 添加 Cookie
- driver.add_cookie({"name": "test", "value": "123"})
- # 删除 Cookie
- driver.delete_cookie("test")
复制代码 2.6.2 实行 JavaScript
- driver.execute_script("alert('Hello, Selenium!')")
复制代码 2.7 处置处罚弹窗
- # 等待弹窗出现
- alert = WebDriverWait(driver, 10).until(EC.alert_is_present())
- # 获取弹窗文本
- print(alert.text)
- # 接受弹窗
- alert.accept()
复制代码 3. 进阶本领
3.1 动态 XPath
动态页面的元素属性大概变革,可以利用包罗或正则表达式的 XPath:- element = driver.find_element(By.XPATH, "//button[contains(@class, 'submit')]")
复制代码 3.2 验证页面加载完成- WebDriverWait(driver, 10).until(
- lambda d: d.execute_script("return document.readyState") == "complete"
- )
复制代码 4. 常见题目和办理方案
- 元素未找到
- 元素不可交互
- 查抄是否须要滚动或切换到 iframe。
- 确保元素可见。
- 动态加载内容
- 利用 WebDriverWait 处置处罚延伸加载的内容。
5. 总结
Selenium 提供了丰富的 API,涵盖了欣赏器操纵、页面元素交互、动态期待等场景。熟练把握这些 API,可以资助我们轻松应对;爬虫、 Web 自动化测试的各种寻衅。
|