Python Selenium常用语法汇总(包含XPath语法)

devtools/2024/10/9 13:33:15/

Python 的 Selenium 库是一个强大的工具,用于自动化浏览器操作,常用于网页测试、爬虫等场景。下面是一些常用的 Selenium 语法和操作方法总结:

1. 安装 Selenium 和 WebDriver

首先,你需要安装 Selenium 库以及对应的 WebDriver。WebDriver 是一个浏览器的驱动程序,它允许 Selenium 控制浏览器。

pip install selenium

对于不同的浏览器,需要下载相应的 WebDriver:

  • Chrome: ChromeDriver
  • Firefox: GeckoDriver
  • Edge: EdgeDriver

2. 启动一个浏览器会话

python">from selenium import webdriverdriver = webdriver.Chrome('/path/to/chromedriver')  # 指定 WebDriver 的路径
driver.get('http://www.example.com')  # 打开网页

3. 元素定位

Selenium 提供多种方法来定位页面元素:

python"># 通过 ID 定位
element = driver.find_element_by_id('id')# 通过名称定位
element = driver.find_element_by_name('name')# 通过类名定位
elements = driver.find_elements_by_class_name('class_name')# 通过标签名定位
elements = driver.find_elements_by_tag_name('tag_name')# 通过链接文本完全匹配定位
element = driver.find_element_by_link_text('link_text')# 通过链接文本部分匹配定位
element = driver.find_element_by_partial_link_text('partial_link_text')# 通过 XPath 定位
element = driver.find_element_by_xpath('//div[@class="myclass"]')# 通过 CSS 选择器定位
element = driver.find_element_by_css_selector('div.myclass')

4. 元素交互

python"># 输入文本
element.send_keys('some text')# 点击元素
element.click()# 清除文本输入框的内容
element.clear()

5. 等待 (Implicit Wait 和 Explicit Wait)

python"># 隐式等待
driver.implicitly_wait(10)  # 等待 10 秒,直到元素可用# 显式等待
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'id'))
)

6. 执行 JavaScript

python">driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')  # 滚动到页面底部

7. 管理窗口和标签页

python"># 获取当前窗口句柄
current_window = driver.current_window_handle# 切换到新窗口
for handle in driver.window_handles:if handle != current_window:driver.switch_to.window(handle)# 关闭当前窗口
driver.close()# 关闭浏览器
driver.quit()

8. 截屏

python">driver.save_screenshot('screenshot.png')

XPath语法详解

XPath(XML Path Language)是一种在 XML 和 HTML 文档中查找信息的语言。Selenium 支持使用 XPath 来定位页面元素,这使得元素定位更加灵活和强大。以下是 XPath 的常用语法和一些示例,这些可以帮助你更有效地在使用 Selenium 时定位元素。

基本语法

  1. 选择节点

    • / 从根节点选取。
    • // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    • . 选取当前节点。
    • .. 选取当前节点的父节点。
  2. 谓词(Predicates)

    • [] 用来查找特定的节点或者包含某个特定值的节点。
    • 例如://input[@type='text'] 选取所有 type 属性为 textinput 元素。
  3. 通配符

    • * 匹配任何元素节点。
    • 例如://* 选取文档中的所有元素。
  4. 选择多个路径

    • | 用于合并两个或多个 XPath 查询。
    • 例如://div | //p 选取所有 divp 元素。

常用函数

  • text() 获取节点的文本内容。
    • 例如://a[text()='点击这里'] 选取文本内容为“点击这里”的 a 元素。
  • contains() 判断某个属性或文本是否包含某个字符串。
    • 例如://div[contains(@class, 'important')] 选取类属性包含 importantdiv 元素。
  • starts-with() 判断某个属性或文本是否以某个字符串开始。
    • 例如://input[starts-with(@id, 'login')] 选取其 id 属性以 login 开头的 input 元素。
  • last() 选择最后一个元素。
    • 例如://(//a)[last()] 选取最后一个 a 元素。
  • position() 返回节点在其父节点中的位置。
    • 例如://li[position()=3] 选取第三个 li 元素。

高级用法

  • 轴(Axes)

    • ancestor 选取当前节点的所有祖先元素(父、祖父等)。
    • descendant 选取当前节点的所有后代元素(子、孙等)。
    • following 选取文档中当前节点的结束标签之后的所有节点。
    • preceding 选取文档中当前节点的开始标签之前的所有节点。

    例如:

    • //div/ancestor::form 选取所有包含 divform 祖先元素。
    • //div/following::input 选取所有在文档中出现在 div 元素之后的 input 元素。

通过理解和运用这些 XPath 表达式,你可以更加精确地定位 HTML 文档中的元素,这对于使用 Selenium 进行web自动化测试和数据抓取是非常有用的。


其他

CentOS安装Selenium教程


http://www.ppmy.cn/devtools/120387.html

相关文章

Qt C++设计模式->外观模式

外观模式(Facade Pattern)是一种结构型设计模式,提供了一个统一的接口,用来访问子系统中的一群接口。外观模式通过定义一个高级接口,使得子系统更加容易使用,避免了客户端直接与子系统的复杂交互。 外观模…

PHP爬虫:获取商品SKU详细信息的艺术

在电子商务的世界里,SKU(Stock Keeping Unit,库存单位)是每个商品的唯一标识符,它包含了商品的详细信息,如尺寸、颜色、价格等。对于商家和开发者来说,获取商品的SKU详细信息对于库存管理、订单…

旅游避坑指南

1.火车站旁白的小摊贩,还有周边的小饭店百分之百是黑店,不仅难吃要死而且巨黑!!! 可以地图上搜索附近的大型商超,例如泰安市的银座商超,里面的东西不仅好吃而且价格透明,还有很多当…

easyExcel使用模版填充excel,合并单元格

一、最终效果 二、制作模版 1、制作填充模版 模版在代码中保存的位置 2、Controller /*** 下载模板*/ RequestMapping(value "exportData") public void exportData(KqKqb kqKqb,HttpServletResponse response, HttpServletRequest request) throws IOExceptio…

【STM32单片机_(HAL库)】4-3-1【定时器TIM】串口打印功能打开

1.硬件 STM32单片机最小系统CH340模块 2.软件 main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "uart1.h"int main(void) {HAL_Init(); /* 初始化HAL库 */stm32_clock_init(R…

《蓝桥杯算法入门》(C/C++、Java、Python三个版本)24年10月出版

推荐:《算法竞赛》,算法竞赛大全书,网购:京东 天猫  当当 文章目录 《蓝桥杯算法入门》内容简介本书读者对象作者简介联系与交流《蓝桥杯算法入门 C/C》版目录 《蓝桥杯算法入门 Java》版目录 《蓝桥杯算法入门 Python》版目录 …

5G 随机接入那点事

文章目录 竞争模式非竞争模式 和LTE 一样 5G 也的RA(Random access)模式也分为以下两种。 竞争模式 基于竞争模式的随机接入(Contention Based Random Access,CBRA),由于接入前导序列是由UE 从SIB1广播的PRACH 信道资…

Spring Boot 进阶-Spring Boot 开发第一个Web接口

在前面的文章中我们对Spring Boot的配置以及日志配置有了大概的了解,在我们搭建完成第一个Spring Boot项目之后也提到了一个概念就是RestFul风格的接口开发。下面我们就来详细介绍一下使用Spring Boot如何去开发一个RestFul的Web接口。 准备 在开发接口之前,需要引入的就是W…