【web测试】selenium:环境搭建|入门案例|元素定位|浏览器操作|页面等待|网站弹出安全验证怎么办

本文介绍了selenium在Python环境下的搭建步骤,包括安装、webdriver配置。针对网站安全验证问题,提出了使用隐式等待的解决方案。接着讲解了元素定位、操作以及页面等待策略,为初学者提供了入门指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

selenium环境搭建:

  1. 基于python环境
  2. selenium安装、卸载、查看:
    安装 pip install selenium
    卸载pop uninstall selenium
    查看 pip show selenium
  3. webdriver下载
    chromewebdriver:
    国内镜像
    找对应的浏览器版本下载
    下载解压好,文件地址放入系统path变量中,或把文件放入项目目录。

入门:打开一个网页

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

# webdriver 获取浏览器对象
s = Service(r"./chromedriver.exe")
driver = webdriver.Chrome(service=s)

# 准备一个网址 https://www.baidu.com/
url = "https://www.baidu.com/"

driver.get(url)
time.sleep(5)
# 回收资源
driver.quit()

网站弹出安全验证怎么办

如果运行自动化脚本,弹出百度安全验证,可以在每条动作语句的后面都加上driver.implicitly_wait(30),运行后出现验证自己去点,wait的时间就是你点验证所需要的最大时间

元素定位

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
from selenium.webdriver.common.by import By

# webdriver 获取浏览器对象
s = Service(r"./chromedriver.exe")
driver = webdriver.Chrome(service=s)

# 准备一个网址 https://www.baidu.com/
url = "https://www.baidu.com/"

driver.get(url)

# 查找元素 方式1.通过id
driver.find_element(by=By.ID, value="kw").send_keys("python")
driver.find_element(By.ID, "su").click()

# 方式2.通过name
driver.find_element(by=By.NAME, value="wd").send_keys("python")
driver.find_element(By.ID, "su").click()

# 方式3.通过class_name
driver.find_element(by=By.CLASS_NAME, value="s_ipt").send_keys("python")
driver.find_element(By.ID, "su").click()

time.sleep(5)
# 回收资源
driver.quit()

  • a标签的定位:
# 定位a标签 link text ; partial linktext
driver.find_element(By.LINK_TEXT, "hao123").click()  # 写a标签中间夹着的内容

# a标签中内容比较长时,可以用一部分内容去定位
driver.find_element(By.PARTIAL_LINK_TEXT, "hao12").click()

  • 通过css选择器定位:
# 通过css选择器定位 #-id,.-class
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("python")
driver.find_element(By.CSS_SELECTOR,".s_ipt").send_keys("python")
driver.find_element(By.CSS_SELECTOR, "[name=wd]").send_keys("python")
driver.find_element(By.CSS_SELECTOR, "[value='百度一下']").click()
  • xpath方式:
    xml path 可扩展 标记语言
    html 超文本 标记语言
谷歌浏览器安装插件:xpath helper
网上下载好解压后.crx的文件改为.rar,再解压到文件夹,把这个文件夹导入到chrome拓展程序中
# xpath方式定位 (xml path)
driver.find_element(By.XPATH, "//*[@id='kw']").send_keys("python")
driver.find_element(By.XPATH, "//*[@id='su']").click()

元素操作

driver.find_element(By.ID, "kw").send_keys("python")
time.sleep(3)
driver.find_element(By.ID, "kw").clear()
driver.find_element(By.ID, "kw").send_keys("java")
driver.find_element(By.ID, "su").click()
# 获取元素大小
print(driver.find_element(By.ID, "kw").size)
# 获取元素文本
print(driver.find_element(By.ID, "kw").text)
# 是否可见
print(driver.find_element(By.ID, "kw").is_enabled())
# 是否可用
print(driver.find_element(By.ID, "kw").is_displayed())
# 获取“新闻”的属性
print(driver.find_element(By.XPATH, "//*[text()='新闻']").get_attribute("href"))

浏览器的操作

# 最大化浏览器
driver.maximize_window()
# 设置浏览器大小:
time.sleep(1)
driver.set_window_size(800, 600)
time.sleep(2)
# 设置浏览器位置
driver.set_window_position(200, 200)
# 浏览器前进后退
driver.find_element(By.ID, "kw").send_keys("python")
driver.find_element(By.ID, "su").click()
time.sleep(5)
driver.back()  # 后退

print(driver.title)
print(driver.current_url)

time.sleep(5)
driver.forward()  # 前进
time.sleep(5)
driver.refresh()  # 刷新
time.sleep(5)

driver.back()
driver.find_element(By.XPATH, "//*[text()='hao123']").click()
time.sleep(5)
driver.close()  # 关闭页面

time.sleep(5)
# 回收资源,关闭浏览器
driver.quit()

页面等待

强制等待,显示等待,隐式等待
代码的执行速度远高于页面加载速度,在翻页时或加载新页面时,需要进行页面等待,等待网页加载

# 输入要搜索的内容 图片
driver.find_element(By.ID, "kw").send_keys("图片")
time.sleep(5)
# 点击 百度一下
driver.find_element(By.ID, "su").click()

# 强制等待
time.sleep(5) # 等待的秒数跟网络有关,并不是最优解

# 显示等待:明确地等待某个元素加载完成,每隔0.5秒检查一次,最多等待*秒时间
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver,5).until(EC.presence_of_element_located((By.ID,'1')))

# 隐式等待:没有明确告知等待哪个元素
driver.implicitly_wait(5)

# 点击第一张图片
driver.find_element(By.XPATH, "//*[@id='1']/div/div[1]/div[2]/div[1]/a[1]").click()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值