0


Python Selenium 库:高级自动化测试与网页交互

在当今的软件开发和网页自动化领域,Python 的 Selenium 库是一个强大的工具。它允许开发者通过编程方式与网页进行交互,实现自动化测试、数据抓取等多种任务。本文将深入探讨 Python Selenium 库的高级用法,展示其在不同场景下的强大功能。

一、Selenium 库简介

Selenium 是一个用于自动化测试网页的工具集,它支持多种浏览器,包括 Chrome、Firefox、Safari 等。Selenium 可以模拟用户在浏览器中的操作,如点击、输入、提交表单等,从而实现自动化测试和网页交互。
在 Python 中,可以使用

pip

安装 Selenium 库:

pip install selenium

二、基本用法

  1. 启动浏览器- 使用 Selenium 可以启动不同的浏览器。以下是启动 Chrome 浏览器的示例代码:from selenium import webdriver driver = webdriver.Chrome()
  2. 访问网页- 启动浏览器后,可以使用get方法访问特定的网页: driver.get('https://www.example.com')
  3. 查找元素- Selenium 提供了多种方法来查找网页中的元素,如通过 ID、名称、类名、标签名等。以下是一些示例代码:# 通过 ID 查找元素 element = driver.find_element_by_id('element_id')# 通过名称查找元素 element = driver.find_element_by_name('element_name')# 通过类名查找元素 element = driver.find_element_by_class_name('element_class')# 通过标签名查找元素 element = driver.find_element_by_tag_name('element_tag')
  4. 与元素交互- 找到元素后,可以对其进行各种操作,如点击、输入文本、获取文本等。以下是一些示例代码:# 点击元素 element.click()# 输入文本 element.send_keys('text')# 获取元素的文本 text = element.text

三、高级用法

  1. 等待页面加载- 在进行网页交互时,有时需要等待页面完全加载后再进行操作。Selenium 提供了多种等待方法,如显式等待和隐式等待。- 显式等待:使用WebDriverWaitexpected_conditions模块,可以设置特定的条件来等待元素出现或页面加载完成。以下是一个示例代码:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 等待元素出现 element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'element_id')))# 等待页面加载完成 WebDriverWait(driver,10).until(EC.title_contains('Page Title'))- 隐式等待:设置一个全局的等待时间,让浏览器在查找元素时等待一定的时间。以下是一个示例代码: driver.implicitly_wait(10)
  2. 处理弹窗- 在网页交互过程中,可能会出现弹窗。Selenium 可以处理这些弹窗,如接受或拒绝弹窗。以下是一个处理弹窗的示例代码:# 切换到弹窗 alert = driver.switch_to.alert # 接受弹窗 alert.accept()# 拒绝弹窗 alert.dismiss()
  3. 切换窗口和标签页- 当打开多个窗口或标签页时,需要切换到不同的窗口或标签页进行操作。以下是一个切换窗口的示例代码:# 获取当前窗口的句柄 current_window = driver.current_window_handle # 打开新窗口 driver.execute_script("window.open('https://www.example.com/new_page')")# 获取所有窗口的句柄 windows = driver.window_handles # 切换到新窗口for window in windows:if window!= current_window: driver.switch_to.window(window)break
  4. 执行 JavaScript- Selenium 可以执行 JavaScript 代码,从而实现更复杂的网页交互。以下是一个执行 JavaScript 的示例代码:# 执行 JavaScript 代码 driver.execute_script("document.getElementById('element_id').click()")
  5. 处理动态网页- 对于动态网页,Selenium 可以使用ActionChains模块模拟鼠标和键盘操作,以处理动态元素。以下是一个示例代码:from selenium.webdriver import ActionChains # 找到元素 element = driver.find_element_by_id('element_id')# 模拟鼠标悬停 actions = ActionChains(driver) actions.move_to_element(element).perform()

四、实际应用场景及代码实现

(一)自动化测试

目标:对一个在线购物网站进行自动化功能测试,包括登录、添加商品到购物车、结算等操作。
代码实现

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

# 启动浏览器
driver = webdriver.Chrome()# 访问购物网站
driver.get('https://www.example-shopping.com')# 等待登录按钮出现并点击
login_button = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'login-button')))
login_button.click()# 输入用户名和密码并提交
username_field = driver.find_element_by_id('username-field')
password_field = driver.find_element_by_id('password-field')
username_field.send_keys('your_username')
password_field.send_keys('your_password')
password_field.send_keys(Keys.ENTER)# 等待商品列表加载并点击第一个商品
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CLASS_NAME,'product-list')))
first_product = driver.find_element_by_css_selector('.product-list.product-item:first-child')
first_product.click()# 点击添加到购物车按钮
add_to_cart_button = driver.find_element_by_id('add-to-cart-button')
add_to_cart_button.click()# 导航到购物车页面
cart_link = driver.find_element_by_id('cart-link')
cart_link.click()# 确认商品在购物车中并点击结算按钮
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CLASS_NAME,'cart-item')))
checkout_button = driver.find_element_by_id('checkout-button')
checkout_button.click()# 输入收货地址等信息并提交订单
address_field = driver.find_element_by_id('address-field')
address_field.send_keys('your_address')
submit_order_button = driver.find_element_by_id('submit-order-button')
submit_order_button.click()# 验证订单提交成功
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'order-success-message')))
success_message = driver.find_element_by_id('order-success-message')assert'Order placed successfully'in success_message.text

# 关闭浏览器
driver.quit()

(二)数据抓取

目标:从一个新闻网站抓取文章标题和内容。
代码实现

from selenium import webdriver
from bs4 import BeautifulSoup

# 启动浏览器
driver = webdriver.Chrome()# 访问新闻网站
driver.get('https://www.example-news.com')# 等待页面加载完成
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CLASS_NAME,'article-list')))# 获取页面源代码
page_source = driver.page_source

# 使用 BeautifulSoup 解析页面
soup = BeautifulSoup(page_source,'html.parser')# 找到文章标题和内容元素
articles = soup.find_all('div', class_='article')for article in articles:
    title = article.find('h2').text
    content = article.find('p').text
    print(f'Title: {title}')print(f'Content: {content}')# 关闭浏览器
driver.quit()

(三)网页监控

目标:监控一个股票交易网站的特定股票价格,当价格达到设定的阈值时发送邮件通知。
代码实现

from selenium import webdriver
import smtplib
from email.mime.text import MIMEText
from time import sleep

# 启动浏览器
driver = webdriver.Chrome()# 访问股票交易网站
driver.get('https://www.example-stock.com')# 设定股票代码和价格阈值
stock_code ='ABC'
threshold_price =100.0whileTrue:# 查找股票价格元素
    price_element = driver.find_element_by_xpath(f"//span[contains(text(),'{stock_code}')]/following-sibling::span[@class='price']")
    current_price =float(price_element.text)# 检查价格是否达到阈值if current_price >= threshold_price:# 发送邮件通知
        msg = MIMEText(f'The price of {stock_code} has reached the threshold of {threshold_price}.')
        msg['Subject']='Stock Price Alert'
        msg['From']='[email protected]'
        msg['To']='[email protected]'

        s = smtplib.SMTP('smtp.example.com')
        s.sendmail('[email protected]','[email protected]', msg.as_string())
        s.quit()

    sleep(60)# 每隔一分钟检查一次价格# 关闭浏览器
driver.quit()

五、总结

Python 的 Selenium 库是一个强大的工具,用于自动化测试网页和与网页进行交互。通过掌握 Selenium 的高级用法,可以实现更复杂的网页操作和任务。无论是自动化测试、数据抓取还是网页监控,Selenium 都能提供强大的功能和灵活性。在使用 Selenium 时,需要注意处理各种异常情况和优化性能,以确保脚本的稳定性和效率。

标签: python selenium 交互

本文转载自: https://blog.csdn.net/liuhailong0511/article/details/142494418
版权归原作者 三带俩王 所有, 如有侵权,请联系我们删除。

“Python Selenium 库:高级自动化测试与网页交互”的评论:

还没有评论