Python脚本实现PC端大麦网自动购票(Selenium自动化测试工具)

文章目录

  • Selenium 简介
  • Selenium webdriver 文档
  • chromedriver(谷歌浏览器驱动)
    • chromedriver 下载
    • 配置环境变量
  • 大麦网购票脚本
    • 网页 dom 元素
  • 启用远程调试(操作已打开的窗口)

Selenium 简介

Selenium 是一个用于自动化测试的工具,最初是为 Web 应用程序测试而创建的。它提供了一个用于模拟用户在浏览器中的行为的 API,可以用于执行各种自动化任务,包括网页爬取、网站监测、表单填写等。

  • 跨平台性:Selenium 可以在多种操作系统(如 Windows、Mac OS、Linux)上运行,并支持多种浏览器(如 Chrome、Firefox、Safari)。
  • 支持多种语言:Selenium 提供了多种语言的客户端库,包括 Java、Python、JavaScript、Ruby、C# 等,因此可以根据个人喜好选择适合自己的语言。
  • 模拟用户行为:Selenium 可以模拟用户在浏览器中的行为,包括点击链接、填写表单、提交数据等,可以实现各种复杂的自动化任务。
  • 强大的定位方式:Selenium 提供了丰富的定位元素的方法,可以通过 ID、类名、标签名、XPath、CSS 选择器等多种方式定位元素。

Selenium webdriver 文档

  • https://www.selenium.dev/zh-cn/documentation/webdriver/

在这里插入图片描述

chromedriver(谷歌浏览器驱动)

注意: chromedriver版本必须 >= Chrome版本。

  • chrome://settings/help

在这里插入图片描述

chromedriver 下载

  • chromedriver下载:https://chromedriver.chromium.org/downloads

在这里插入图片描述

  • chromedriver测试版下载:https://googlechromelabs.github.io/chrome-for-testing/

在这里插入图片描述

配置环境变量

# 将 chromedriver 复制到该目录
cd /usr/local/bin
# 配置环境变量
echo 'export PATH="$PATH:/usr/local/bin/chromedriver"' >> ~/.zshrc
source ~/.zshrc
# 验证安装
chromedriver --version

大麦网购票脚本

友情提示: 本示例仅供技术交流学习抢不了票哈。

  • 安装 Selenium
pip3 install selenium
  • 操作大麦网示例
from selenium import webdriver
from selenium.webdriver.common.by import By
import timeoptions = webdriver.ChromeOptions()
# 保持浏览器的打开状态
options.add_experimental_option("detach", True)
# 设置浏览器窗口最大化
options.add_argument("--start-maximized")
# 隐藏WebDriver等自动化测试工具的特征,以减少被检测到的可能性
options.add_experimental_option('excludeSwitches', ['enable-automation'])# 与正在运行的Chrome实例进行通信,从而进行远程调试、性能分析等操作
#options.add_argument('--remote-debugging-port=9222')
# 无界面模式下运行,使用无界面模式可以加快程序执行速度,节省资源
#options.add_argument('--headless')# 不请求图片模式
# options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})# 创建WebDriver实例
driver = webdriver.Chrome(options=options)# 选择浏览第一个标签页
driver.switch_to.window(driver.window_handles[0])# 打开大麦网站
driver.get("https://www.damai.cn/")
time.sleep(1)
print("网页标题:", driver.title)# 选择《音乐会》
category_a = driver.find_element(By.XPATH, "//div[@class='category w1200']//a[6]")
print(category_a.text)
category_a.click()
time.sleep(1)# 清空搜索框并输入
driver.find_element(By.XPATH, "//div[@class='search-header']//input").clear()
driver.find_element(By.XPATH, "//div[@class='search-header']//input").send_keys("大提琴" )
time.sleep(1)# 点击搜索按钮
driver.find_element(By.XPATH, "//div[@class='btn-search']").click()
time.sleep(1)# 选择第一个搜索结果
driver.find_element(By.XPATH, "//div[@class='item__box']//div[1]//a").click()
time.sleep(1)# 选择浏览第二个标签页(刚被打开的新页面)
driver.switch_to.window(driver.window_handles[1])
print("网页标题:", driver.title)# 点击二维码下方购买链接
driver.find_element(By.XPATH, "//div[@class='buy-link']").click()
time.sleep(5)# 关闭浏览器
driver.quit()

网页 dom 元素

driver.find_element(By.XPATH, "//div[@class='category w1200']//a[6]")

在这里插入图片描述

driver.find_element(By.XPATH, "//div[@class='search-header']//input")
driver.find_element(By.XPATH, "//div[@class='btn-search']")

在这里插入图片描述

driver.find_element(By.XPATH, "//div[@class='item__box']//div[1]//a")

在这里插入图片描述

driver.find_element(By.XPATH, "//div[@class='buy-link']")

在这里插入图片描述

启用远程调试(操作已打开的窗口)

打开 Google Chrome 浏览器,并启用远程调试功能,监听本地的 9222 端口。

# Mac OS
open -na "Google Chrome" --args --remote-debugging-port=9222
# Windows
start chrome --remote-debugging-port=9222

注意: 远程链接可以保持当前窗口会话。

  • 脚本增加以下配置项
options = webdriver.ChromeOptions()
# 与正在运行的Chrome实例进行通信,从而进行远程调试、性能分析等操作
options.add_argument('--remote-debugging-port=9222')
# 无界面模式下运行,使用无界面模式可以加快程序执行速度,节省资源
options.add_argument('--headless')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/3832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何查看自己的公网IP?

我们在网络中,每一个设备都被分配了一个唯一的IP地址,用以区分和识别其他设备。公网IP地址是指可被公众访问的IP,是因特网上的全球唯一标识。当我们需要查看自己的公网IP时,可以采取以下几种方式。 使用命令行查看公网IP 在Windo…

算法06链表

算法06链表 一、链表概述1.1概述1.2链表的组成部分:1.3链表的优缺点: 二、链表典例力扣707.设计链表难点分析:(1)MyLinkedList成员变量的确定:(2)初始化自定义链表:&…

06.JAVAEE之线程4

1.定时器 1.1 定时器是什么 定时器也是软件开发中的一个重要组件. 类似于一个 " 闹钟 ". 达到一个设定的时间之后 , 就执行某个指定好的代码. 约定一个时间,时间到达之后,执行某个代码逻辑, 定时器非常常见,尤其是在进行网络通信的时候, 需要有等待的最大时间&…

Linux之线程管理

目录 第1关:创建线程 任务描述 相关知识 使用pthread_create函数创建线程 编程要求 答案: 第2关:线程挂起 任务描述 相关知识 使用pthread_join挂起线程 编程要求 答案: 第3关:线程终止 任务描述 相关知识 使用pthread…

18种WEB常见漏洞:揭秘网络安全的薄弱点

输入验证漏洞: 认证和会话管理漏洞: 安全配置错误: 其他漏洞: 防范措施: Web 应用程序是现代互联网的核心,但它们也容易受到各种安全漏洞的影响。了解常见的 Web 漏洞类型,对于开发人员、安全测试人员和普通用户都至关重要。以下将介绍 18 种常见的 …

MySQL—MySQL的存储引擎之InnoDB

MySQL—MySQL的存储引擎之InnoDB 存储引擎及种类 存储引擎说明MyISAM高速引擎,拥有较高的插入,查询速度,但不支持事务InnoDB5.5版本后MySQL的默认数据库存储引擎,支持事务和行级锁,比MyISAM处理速度稍慢ISAMMyISAM的…

Android Studio查看viewtree

前言:之前开发过程一直看的是手机上开发者选项中的显示布局边界,开关状态需要手动来回切换,今天偶然在Android Studio中弄出了布局树觉得挺方便的。

JPEG图像常用加密算法简介

JPEG图像加密算法 目前,JPEG图像加密算法可以分成异或加密、置乱加密和置乱与异或组合加密。下面对这三种加密方式进行阐述。 (1) 异或加密 文献[1]提出了一种基于异或加密的JPEG图像的RDH-EI方案。该算法通过对AC系数的ACA和图像的量化表进行流密码异或&#xf…

代码随想录训练营Day 33|Python|Leetcode|● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

理论基础 动态规划五步曲 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始…

vue3——笔记2(计算属性,类与样式绑定)

计算属性 在 Vue3 中,计算属性的用法和 Vue2 基本上是一样的,但是在性能上有了一些改进。Vue3 中计算属性是通过computed函数来创建的,计算属性的值会在相关依赖发生改变时自动更新。与 Vue2 相比,Vue3 的计算属性在一些场景下会…

某翻译平台翻译接口逆向之webpack学习

逆向网址 aHR0cHM6Ly9mYW55aS55b3VkYW8uY29tLw 逆向链接 aHR0cHM6Ly9mYW55aS55b3VkYW8uY29tLyMv 逆向接口 aHR0cHM6Ly9kaWN0LnlvdWRhby5jb20vd2VidHJhbnNsYXRl 逆向过程 请求方式 POST 逆向参数 sign c168e4cb76169e90f82d28118dbd24d2 接口请求结果解密 过程分析 根据XHR…

大数据第七天

文章目录 吐槽一下这个是怎么需要真的这么大吗? 内核错误内核软死锁(soft lockup)我这个cpu很高吗?大模型都说了不超过80就行了 FinBi安装FinBI下载链接安装时间比较长 吐槽一下 dbeaver 查询hive 数据信息是真的慢,没有一点快的方式&…

【优秀AI项目】每日跟踪 OpenVoice ,AI快站,OpenVoice

持续更新好玩的开源AI项目或AI商业应用体验 一起来玩转AI!! 1 huggingface 国内镜像站:AI 快站 HUggingface被墙了,emmmmm 所以我之前玩模型的一大感觉就是 下载什么模型之类的太难受了!服了 看到一个镜像站——…

在Visio中插入半圆状箭头

在 Microsoft Visio 中,你可以通过以下步骤来绘制一个带箭头的半圆: 1.打开 Visio:打开 Microsoft Visio 软件。 2.选择绘图类型:在 Visio 中,你可以选择使用“基本形状”或“箭头线”工具来绘制带箭头的半圆。 使用…

文件权限管理

文件权限管理 1. 权限对象 权限对象含义u属主,所有者g属组o其他人 2. 权限类型 权限类型含义值r读权限4w写权限2x执行权限1 3. 修改文件属主及属组 命令:chown(change own)更改文件或目录属主与属组名 3.1 修改文件属主与属组 只修改属主:chown $…

Open CASCADE学习|一个点的坐标变换

gp_Trsf 类是 Open CASCADE Technology (OCCT) 软件库中的一个核心类,用于表示和操作三维空间中的变换。以下是该类的一些关键成员和方法的介绍: 成员变量: scale: Standard_Real 类型,表示变换的缩放因子。 shape: gp_TrsfFor…

Android11 SystemUI clock plugin 插件入门

插件的编写 参照ExamplePlugin,需要系统签名。 需要先编译以下模块得到jar,引用在项目中。 m SystemUIPluginLibcom.android.systemui.permission.PLUGIN PluginManager.addPluginListener SystemUI 是如何发现 clock plugin 的? Syste…

FDY10蓄电池容量检测仪

FDY10-H说明书2013 08.pdf (book118.com)https://max.book118.com/html/2017/0510/105769526.shtm FDY10用户手册 - 百度文库 (baidu.com)https://wenku.baidu.com/view/22e7fe672d3f5727a5e9856a561252d380eb20ac?aggId28d62908f12d2af90242e62a&frcatalogMain_graph_v10…

ThingsBoard处理设备上报的属性并转换为可读属性

一、前言 二、案例 1、AI生成JSON数据体 2、将json数据体直接通过遥测topic发送查看效果 3、可查看目前整个数据都在一起 ​编辑 4、配置附规则链路 5、对msg的消息值,进行数据的转换,并从新进行赋值。 6、规则链路关联关系 7、再次通过MQTT发送遥…

WebGIS

文章目录 GIS的全名是Geographic Information System,中文全名是地理信息系统。 它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术…