解决腾讯股吧时间轴选择问题
有的同学看了我发的playwright教程后,在学习过程中有问题会跟我沟通交流,我也是非常高兴与同学一块学习的。前几天有同学问了一个关于时间选择的问题,今天终于有时间处理一下了。具体问题看下图:
打开同学问题中的网页,所说的时间轴如下图:
按照同学所说,他应该是希望点击时间轴上的时间,以展示不同时间对应的股票数据。但是观察这个时间轴的html,发现是无法直接去定位某个时间点的,这个应该就是这位同学没有自己实现而问我的原因。
没有办法直接定位时间点,那怎么处理呢?通过使用这个时间轴我们会发现它除了可以鼠标直接在时间轴上点击不同时间点来获取不同时间对应数据外,也可以通过点击时间轴左右两侧的箭头来移动时间轴上的滑块,也可以获取数据。而且会发现滑块每移动一次,滑块上的时间范围也会跟着改变,这样我们就可以通过点击时间轴左右两侧的按钮移动滑块,同时判断滑块上的时间段范围是否包含我们的目标时间就可以了,如果满足要求不再点击按钮。
要判断滑块上的时间段范围是否是我们所需的时间,我们就需要定位时间段所在元素并获取时间范围了。
整体的思路就是,如果目标时间小于滑块对应时间范围的开始时间就点击向左移动的按钮,如果目标时间大于滑块对应时间范围的结束时间就点击向右移动的按钮,直到滑块移动到我们的目标时间点所在时间范围。
实践代码:
'''
# author: 测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
'''
from playwright.sync_api import Playwright, sync_playwright, expect
import re
import pytest
target_time = '10:46' # 目标时间
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False,slow_mo=1000)
context = browser.new_context()
page = context.new_page()
page.goto("https://gu.qq.com/sz000001/gp/detail")
frame = page.frame_locator('#Main')
arrow_right = frame.locator('.arrow-right')
arrow_left = frame.locator('.arrow-left')
#循环对比时间,直到滑块移动到目标时间点
while True:
t = frame.locator('.bar.current').inner_text() # 获取滑块对应的时间范围
print(t)
t_li = re.findall('\d+:\d+',t) # 正则提取滑块对应的时间范围
if target_time < t_li[0]: #对比时间,选择按钮点击
arrow_left.click()
elif target_time > t_li[1]:
arrow_right.click()
else:
break
page.wait_for_timeout(10000)
# ---------------------
context.close()
browser.close()
playwright.stop()