Web网页自动化实战《3.在艺龙网中,根据城市+日期+关键词精准匹配了酒店》下篇...

本文主要是介绍Web网页自动化实战《3.在艺龙网中,根据城市+日期+关键词精准匹配了酒店》下篇...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 一、代码思路

  • 二、唯一定位“目的地”

    • 1、文本定位

    • 2、层级定位

  • 三、总结

    • 1、代码

    • 2、遇到的坑

手工测试是怎么点的,自动化测试就怎么点击。(截图讲解的技术知识是正确的。因为艺龙网站的页面元素有变动,所以你实操起来,看到的元素和截图上的会有区别。)

一、代码思路

想用代码实现以下操作:

1.打开网址进入首页,点击目的地输入框,等弹框弹出来,选择热门城市里面的广州,点击。

2.元素定位到入住日期输入框,清空入住日期输入框中的内容,输入日期,点击目的地使日期弹框关闭。

3.元素定位到退房日期输入框,清空退房日期输入框中的内容,输入退房日期,点击目的地使日期弹框关闭。

4.元素定位到关键词输入框,清空关键词输入框中的内容,输入关键词,点击目的地使弹框关闭。

5.点击搜索。

6.(这时已经跳转到下一个页面),在这个页面中点击某酒店名称。

7.关闭所有页面。

二、唯一定位“目的地”

1、文本定位

表达式://标签名[text()=文本内容] 这个是固定语法。

//dt[text()="目的地"]

b45928c948f3f7ef7e0cc2458b60c968.png
定位出来2个,鼠标悬浮在第一个的黄色部分上,发现目的地上覆盖着蓝色且提示dt.w60,说明这个是我想要的元素
35cf165013ce21ae49daa1aefe54b8fa.png
看第二个看不出来有啥区别

通过它本身的特征没有办法唯一的定位到它自己。

2、层级定位

层级定位:当自身的特征无法唯一的定位到自己,借助父级/祖先级。

通过父级/祖先级,缩小查找范围。在父级/祖先级的后辈当中,再来查找自己。

先找到你爸爸,再从你爸爸的后辈里去找你。

这个需要你自己去观察和分析的:
ea0375136f7e1c9e53ae8fc215dd7b11.png

如果你看到元素的祖辈/父辈里面有id属性,赶紧用,可好用了。

//div[@id="domesticDiv"]

3fbd35d3cd96818569185f1337415fa4.png
通过这个已经找到了祖父级。
接下来通过这个表达式找到了自己:

//div[@id="domesticDiv"]//dt[text()="目的地"]

第一个//相对于整个html页面去查找。

第二个//相对于上一个//找到的元素。在它的后辈(不管是儿子、孙子还是孙孙子,只要是它的后代都可以)当中,去查找。

dbf8cd0f4ace982544e85da8eac4a46a.png
通过祖父级找到了自己

三、总结

1、代码

from selenium.webdriver.common.by import Byfrom selenium import webdriver
import time
#打开谷歌浏览器,与浏览器建立了会话。
#driver变量=会话。
driver=webdriver.Chrome()
driver.get("https://www.elong.com/")#这行代码执行后,会等到页面加载得差不多了再去执行下一行代码。
#get()这个功能是会等到页面加载完成的。
#有的时候页面加载出来了,但是渲染的方式有些慢。
#所以我还想等1秒也是可以的。
time.sleep(1)#查找元素通过xpath定位方式。
ele=driver.find_element(By.XPATH,'//input[@data-bindid="city"]')#定位到目的地的输入框,将刚才在写好的表达式复制过来。
# ele= 我找到的元素
# 点击操作 -- 点击目的地输入框,弹出城市选择框。
ele.click()
time.sleep(2)#运行这行代码后会停留2秒,然后再去运行下一行代码。
#因为接下来要操作的元素,是动态出现的(不是一开始访问网站就有的,而是你做了一个动作让人家动态的出现了)。
#它是需要时间呈现在页面上的。这个时间就需要你来等一等了。等一等网页,再去找这个元素去操作。#输入操作 --ele.send_keys("输入操作")
# 获取它的属性-- ele.get_attribute("属性名称")
#获取它的文本内容-- ele.text#选择热门城市当中的广州
driver.find_element(By.XPATH,'//li[@title="广州"]').click()
time.sleep(1)#加上等待时间。sleep时间不宜太长,7秒8秒,这个时间就太长了。
#没加等待时间的时候运行代码,会发现操作太快了,且没有选择到对应的日期。#选择入住日期
ele=driver.find_element(By.XPATH,'//input[@data-bindid="checkIn"]')
ele.clear()   #输入日期前,先清空输入框的内容。
ele.send_keys("2022-05-27")time.sleep(1)#每个操作间都加了等待时间。'''
输入日期后,日期框没有消失,得让日期框消失。点击除了它以外的其它元素
(选一个页面固定的元素,那就点击目的地这个元素),
日期框就能消失了。再去处理下一个元素。不然日期框会挡住别的元素。
接下来点击搜索,搜索按钮被这个日期框遮住了。就会影响你的操作效果。
所以我是根据页面的特征习性来处理的。
'''#把弹出的日期选择框关掉。
driver.find_element(By.XPATH,'//div[@id="domesticDiv"]//dt[text()="目的地"]').click()# 选择退房日期
ele=driver.find_element(By.XPATH,'//input[@data-bindid="checkOut"]')
ele.clear()
ele.send_keys("2022-05-30")#输入日期
time.sleep(1)
driver.find_element(By.XPATH,'//div[@id="domesticDiv"]//dt[text()="目的地"]').click()
time.sleep(1)ele=driver.find_element(By.XPATH,'//input[@data-bindid="allInOne"]')
ele.clear()
ele.send_keys("喜悦门酒店(广州融创文旅城店)")
time.sleep(1)
driver.find_element(By.XPATH,'//div[@id="domesticDiv"]//dt[text()="目的地"]').click()
driver.find_element(By.XPATH,'//span[@data-bindid="search"]').click()
time.sleep(1)
driver.find_element(By.XPATH,'//span[@title="喜悦门酒店(广州融创文旅城店)"]').click()
time.sleep(3)
driver.quit()#退出相关驱动,关闭所有窗口。

2、遇到的坑:

1.输入框输入数据前,先清空输入框的内容再输入。否则会报错。
9a20d41130d3afebef7a3a562c909831.png
2.selenium弃用警告DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element()

链接:https://blog.csdn.net/qq_45007567/article/details/120829410


文章中的链接的版权归原作者所有,除标明 “图片来自网络” 的图片,皆为小编本人所画所截图。欢迎关注 “清菡软件测试”,进群加v:qhtester,感谢点赞与分享!

这篇关于Web网页自动化实战《3.在艺龙网中,根据城市+日期+关键词精准匹配了酒店》下篇...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/260340

相关文章

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思