我试图在每次跨度变化时打印其值。打印跨度值非常容易:
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_'
请说明我需要添加什么,或者我需要使用什么方法来获取不断变化的值
Please I beg you, please beware Im not trying to print the text of the span, I already know how to do that, I want print it everytime it changes
假设元素确实消失并再次出现:
您可以在等待元素被定位和被定位之间来回切换
假设元素内容发生变化,但不会消失:
我不知道有什么明确的方法来等待元素内容的更改,所以就我而言,您需要自己比较更改。您可能需要添加绝对等待时间<;2秒来限制不必要的比较
请注意:只有当值每次都发生更改,或者不需要重复的值时,这才有效。 如果您需要每个值,可以省去比较,每隔约2秒添加一个值
例如: 您提供的binary.com上的页面使用websocket刷新内容。这是一个协议,允许服务器向客户机发送数据,反之亦然。 因此,这是一种与您习惯的http协议不同的方法(您发送一个请求,服务器回复-假设您请求该网页,那么服务器将只发送它)
此协议打开连接并使其保持活动状态。人们几乎不会等待这种变化。但是:在你的浏览器中(假设这里是Chrome),你可以进入你的开发者工具,进入“网络”选项卡并过滤WS(websocket)。您将看到一个v3?app_id=1的连接(您可能需要刷新页面以在网络选项卡中显示输出)。 单击该连接,您将看到您的客户端发送的消息和您收到的消息。当然,你只需要那些收到的,所以过滤那些
由于这些步骤相当多,请查看屏幕截图,它将显示正确的设置:
每条消息都是json格式的,您可以单击它来查看其内容。在“勾选”下,您将看到买卖数据。 如果这样就足够了,您可以根据需要将页面保持打开状态,然后复制输出,将其保存为文件,并使用python读取以进行分析
似乎您也可以使用selenium实现自动化,如下所示: http://www.amitrawat.tech/post/capturing-websocket-messages-using-selenium/
基本上他们做同样的事情,他们设置记录日志的功能,然后过滤日志以获得所需的数据。请注意,他们使用Java来实现这一点,但将其转换为python并不困难
相关问题 更多 >
编程相关推荐