python - 每次在 selenium python 中更改时获取跨度文本(值)
问题描述
我试图在每次更改时打印跨度的值。打印跨度的值非常简单:
popup = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="spot"]')))
Print(popup.text)
这将打印当时的值,问题是该值将每 2 秒更改一次。我尝试使用:
# wait for the first popup to appear
popup = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="spot"]')))
# print the text
print(popup.text)
# wait for the first popup to disappear
wait.until(EC.staleness_of(popup))
# wait for the second popup to appear
popup = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="spot"]')))
# print the text
print(popup.text)
# wait for the second popup to disappear
wait.until(EC.staleness_of(popup))
Print(popup)
命令并且它部分工作。它打印了相同的值 489 次,直到它改变并再次打印另一个值 489 次。我已经尝试过这段代码:
popup = wait.until(EC.text_to_be_present_in_element_value((By.XPATH, '//*[@id="spot"]')))
print(popup.text)
TypeError: __init__() missing 1 required positional argument: 'text_'
请帮助我需要添加什么或者我需要使用什么方法来获得变化的值。
求求你,请注意我没有尝试打印跨度的文本,我已经知道该怎么做,我想在每次更改时打印它
解决方案
假设元素确实消失并再次出现:
您可以在等待元素被定位和被定位之间来回切换。
假设元素内容发生了变化,但没有消失:
我不知道等待元素内容更改的任何显式方法,因此就我而言,您需要自己比较更改。您可能希望添加 < 2 秒的绝对等待,以限制您进行的不必要比较的数量。
# Init a list to contain the values later on
values = []
# Wait for the element to be loaded in the first place
popup = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="spot"]')))
values.append(popup.text)
while True:
# possibly wait here
new_value = driver.find_element(By.XPATH, '//*[@id="spot"]')
# look up if the value has changed based on the values you know and add the new value
if values[-1] != new_value:
values.append(new_value)
# add an exit condition unless you actually want to do it forever
请注意:这仅在值每次都实际更改或您不需要彼此跟随的重复项时才有效。如果您需要每个值,则可以省略比较并每 ca 添加一个值。2 秒。
对于您的示例: 您提供的 binary.com 上的页面使用 websocket 来刷新内容。这是一个允许服务器向客户端发送数据的协议,反之亦然。因此,这是您习惯的 http 协议的不同方法(您发送请求,服务器回复 - 假设您请求网页,然后服务器将发送它)。
该协议打开一个连接并使其保持活动状态。几乎不会等待预期这种变化。但是:在您的浏览器中(假设是 Chrome),您可以进入您的开发人员工具,进入“网络”选项卡并过滤 WS(websocket)。您将看到与 v3?app_id=1 的连接(您可能需要刷新页面才能在 Network-Tab 中获得输出)。单击该连接,您将看到您的客户发送的消息和您收到的消息。自然,您只需要收到的那些,因此请过滤掉那些。
每条消息都是 json 格式,您可以单击它查看其内容。在“tick”下,您会看到询价和出价数据。如果足够了,您可以根据需要将页面保持打开状态,然后复制输出,将其保存为文件并使用 python 读取以进行分析。
似乎您也可以使用 selenium 自动执行此操作,如下所示:http: //www.amitrawat.tech/post/capturing-websocket-messages-using-selenium/
基本上他们做同样的事情,他们设置记录日志的能力,然后过滤它以获得他们需要的数据。请注意,他们使用 Java 来做到这一点——但翻译成 python 并不难。
推荐阅读
- unity3d - Unity 项目现在需要 IL2CPP
- dart - 相机抖动预览
- quantum-computing - 如何通过 Q# 中的 Oracle 对象传递量子位寄存器
- java - 使用 Jasper 报告和 Spring @Async 创建报告
- c++ - 类型转换自定义结构
- r - 如何使用 R 中的 PAM 方法显示确切的关联规则属于集群?
- sql - 为什么 SQL Server 不使用 SUM 遵循 BODMAS 数学规则?
- ios - 语言更改不受文本验证器的影响
- opencv - OpenCv 在构建时不保存图像?
- google-cloud-storage - 未找到有关 API 实例的属性“类型”(SCRATCH) 的详细信息。attachDisk()