Selenium模块

Selenium 模块

1.selenium 模块基础

1.1 selenium 模块的安装与基础用法

Selenium 需要与浏览器相应的 WebDriver 驱动程序一起使用,以便能够控制浏览器的行为。不同的浏览器需要使用对应的 WebDriver。

以下是几个常见浏览器及其对应的 WebDriver:

  1. Chrome: 需要 Chrome 浏览器驱动,也叫 ChromeDriver。你可以在ChromeDriver官方网站下载。
  2. Firefox: 需要 GeckoDriver。你可以在GeckoDriver官方网站下载。
  3. Edge: 需要 Microsoft Edge 浏览器驱动,也叫 EdgeDriver。你可以在Microsoft Edge Driver官方网站下载。

请注意,每个浏览器的 WebDriver 版本应该与你本地浏览器的版本匹配。下载后,你需要将驱动程序的路径告诉 Selenium,以便它能够找到并使用它。这里我就谷歌浏览器为例,我把 chromedriver.exe 放在了我的环境解释器里面。

运行 Selenium 需要以下步骤:

  1. 安装 Selenium 模块:pip install selenium
  2. 下载对应浏览器的 WebDriver,并确保其在系统 PATH 中,或者提供 WebDriver 路径。
  3. 编写 Python 脚本,使用 Selenium 模块与 WebDriver 控制浏览器。

1.2 selenium模块的标签定位

  1. 通过ID定位: 使用元素的ID属性来定位。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_id("element_id")
    
  2. 通过Name定位: 使用元素的Name属性来定位。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_name("element_name")
    
  3. 通过XPath定位: 使用元素的XPath表达式来定位。XPath是一种XML路径语言,它可以用来在XML文档中导航。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_xpath("//div[@class='example']")
    
  4. 通过CSS选择器定位: 使用CSS选择器来定位元素。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_css_selector("div.example")
    
  5. 通过链接文本定位: 使用链接文本来定位超链接。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_link_text("Example Link")
    
  6. 通过部分链接文本定位: 使用链接文本的一部分来定位超链接。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_partial_link_text("Example")
    
  7. 通过类名定位: 使用元素的类名来定位。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_class_name("example")
    

1.3 selenium模块的标签操作

  1. 点击元素: click() 方法用于模拟点击页面上的元素,比如按钮、链接等。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_id("button_id")
    element.click()
    
  2. 输入文本: send_keys() 方法用于向输入框或可编辑的元素中输入文本。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    input_element = driver.find_element_by_id("input_id")
    input_element.send_keys("Hello, World!")
    
  3. 清除输入框内容: clear() 方法用于清除输入框中的文本。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    input_element = driver.find_element_by_id("input_id")
    input_element.clear()
    
  4. 获取元素文本内容: text 属性用于获取元素的文本内容。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_id("element_id")
    text_content = element.text
    print(text_content)
    
  5. 获取元素属性: get_attribute() 方法用于获取元素的属性值。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_id("element_id")
    attribute_value = element.get_attribute("attribute_name")
    print(attribute_value)
    
  6. 提交表单: submit() 方法用于提交表单。示例代码:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    form = driver.find_element_by_id("form_id")
    form.submit()
    

2. selenium模块进阶

2.1 模拟鼠标操作

  1. 移动到元素: move_to_element()方法用于将鼠标移动到指定元素上。示例代码:

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_id("element_id")
    
    actions = ActionChains(driver)
    actions.move_to_element(element).perform()
    
  2. 点击元素: click()方法用于模拟鼠标左键点击指定元素。示例代码:

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_id("element_id")
    
    actions = ActionChains(driver)
    actions.click(element).perform()
    
  3. 右键点击元素: context_click()方法用于模拟鼠标右键点击指定元素。示例代码:

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_id("element_id")
    
    actions = ActionChains(driver)
    actions.context_click(element).perform()
    
  4. 双击元素: double_click()方法用于模拟鼠标双击指定元素。示例代码:

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    element = driver.find_element_by_id("element_id")
    
    actions = ActionChains(driver)
    actions.double_click(element).perform()
    
  5. 拖拽和释放: drag_and_drop()方法用于模拟拖拽一个元素到另一个元素。示例代码:

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    source_element = driver.find_element_by_id("source_element_id")
    target_element = driver.find_element_by_id("target_element_id")
    
    actions = ActionChains(driver)
    actions.drag_and_drop(source_element, target_element).perform()
    

2.2 <iframe>标签处理

  1. 切换到iframe: 在Selenium中,可以使用switch_to.frame()方法切换到指定的iframe。这个方法接受多种参数,包括iframe的索引、iframe的name或id属性,或者直接传入iframe的WebElement对象。

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    
    # 方法1:通过索引切换到第一个iframe
    driver.switch_to.frame(0)
    
    # 方法2:通过iframe的name或id属性切换到指定iframe
    driver.switch_to.frame("iframe_name_or_id")
    
    # 方法3:通过WebElement对象切换到指定iframe
    iframe_element = driver.find_element_by_id("iframe_id")
    driver.switch_to.frame(iframe_element)
    
  2. 在iframe中操作元素: 一旦切换到了iframe,就可以在其中执行普通的Selenium元素定位和操作了。

    # 在iframe中找到元素并进行操作
    element_inside_iframe = driver.find_element_by_id("element_id_inside_iframe")
    element_inside_iframe.click()
    
  3. 切回主文档: 在完成iframe内的操作后,需要切回到主文档,以便在主文档中执行其他操作。

    # 切回主文档
    driver.switch_to.default_content()
    

    注意:switch_to.default_content()将焦点切回到最外层的文档,不再处于任何iframe中。

  4. 嵌套iframe的处理: 如果页面中存在多层嵌套的iframe,需要多次使用switch_to.frame()切换到正确的iframe。

    driver.switch_to.frame(0)  # 进入第一层iframe
    driver.switch_to.frame("nested_iframe_name")  # 进入第二层iframe
    # 在第二层iframe中执行操作
    driver.switch_to.default_content()  # 切回主文档
    

2.3 显示等待和隐式等待

1.显示等待(Explicit Waits)

显示等待是指在代码中明确指定某个条件并等待直到该条件成立,然后再继续执行后续的代码。这种等待方式在特定条件满足或超时之前会一直等待。

在Selenium中,可以使用WebDriverWait类结合条件类(如expected_conditions)来实现显示等待。

示例:

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

driver = webdriver.Chrome()
driver.get("https://example.com")

# 显示等待,等待元素可见
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "example_id"))
)

# 在元素可见后执行操作
element.click()

在上面的示例中,WebDriverWait类等待最多10秒,直到元素具有可见性,然后执行后续操作。

2.隐式等待(Implicit Waits):

隐式等待是指在查找元素时,如果没有立即找到,将等待一定的时间再次尝试查找。这个等待是全局的,对整个WebDriver的生命周期都有效。

示例:

from selenium import webdriver

driver = webdriver.Chrome()

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

# 在查找元素时,如果没有立即找到,将等待最多10秒
element = driver.find_element_by_id("example_id")

# 在元素找到后执行操作
element.click()

在上面的示例中,implicitly_wait(10)设置了全局隐式等待时间为10秒。这意味着如果在查找元素时没有立即找到,将等待最多10秒再次尝试查找。

3.选择使用哪种等待方式

  • 显示等待通常更灵活,因为可以等待特定条件成立,而不仅仅是等待元素可见或存在。
  • 隐式等待适用于整个测试过程中都需要等待的情况,但可能导致不精确的等待时间,因为它是全局的。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值