目前我正在为whatsapp手工制作一个python机器人,没有API或类似的东西,因为我不知道。因此,我使用Selenium接收消息并自动回复。目前,我注意到每隔几条消息,就有一条消息无法接收,因为循环运行得太慢,而我的计算机已经相当快了。代码如下:
def incoming_msges():
msges = driver.find_elements_by_class_name("message-in")
msgq = []
tq = []
try:
for msg in msges:
txt_msg = msg.find_elements_by_class_name("copyable-text")
time = msg.find_elements_by_class_name("_18lLQ")
for t in time:
tq.append(t.text.lower())
for txt in txt_msg:
msgq.append(txt.text.lower())
msgq = msgq[-1]
tq = tq[-1]
if len(msgq) > 0:
return (msgq, tq)
except StaleElementReferenceException:
pass
return False
以前,我没有添加时间检查功能,发送的消息将被保存,循环将持续运行,这样即使另一方再次发送相同的消息,代码也不会将其识别为新消息,因为它认为它与以前的消息相同。所以现在的问题是,我的代码非常耗时,我不知道如何加快速度。我试着这样做:
def incoming_msges():
msges = browser.find_elements_by_class_name("message-in")
try:
msg = msges[-1]
txt_msg = msg.find_element_by_xpath("/span[@class=\"copyable-text\"]").text.lower()
time = msg.find_element_by_xpath("/span[@class=\"_18lLQ\"]").text.lower()
return (txt_msg, time)
except Exception:
pass
return False
但是,像这样,代码就是找不到任何消息。根据whatsapp网站,我已经获得了正确的元素类型和类,但它就是不运行。当我的第一个代码块仍然正确时,重写它的正确方法是什么?提前谢谢
第一件事首先
我绝对推荐使用API。。。因为你要做的是重新发明轮子。API具有告诉您状态是否发生更改的功能,您可以将这些更改排队。。。所以我绝对推荐使用API。。。一开始可能很难,但相信我,这是值得的
接下来,我建议您使用普通变量名}{}(这些代码有点不可读,我读了两遍代码后仍然没有得到它们应该是什么…)
msges
{但是对于你的速度问题。。。“try-catch(又名除此之外)”块对性能的影响非常大。。。如果可能的话,我建议使用安全编程(20条if语句可能更快,但可能不是同一时间)。。。另外,我认为您不太了解python语言(至少从我在这里看到的情况来看)
这样更好:)
如果我正确理解了你的代码,你是在试图抓取消息,但是如果你说你想制作自动回复机器人,我建议你准备一些JS魔术或切换工具。我个人注意到硒有一个动态内容的问题。。。更具体地说。。。一旦它在文件末尾,它就不会再刮它了。。。因此,如果您不想每5-10秒自动刷新一次以获取最新的HTML文件,我建议您使用JS创建这个bot(每次元素更改时都会触发),或者使用API和selenium仅用于响应。我被告知Selenium是为了模拟普通用户来检查用户界面是否正常工作(如果按钮存在,网站是否包含所有应该包含的内容等等)。。。我认为硒是用于这项工作的,就像用于汽车清洁的花小海绵。。。你能做到的。。。但是这会花费你很多时间,你可能会错过一些地方(比如你错过了那些信息)
最后。。。一般来说,使用字符串的工作非常昂贵。您正在try块中执行O(n^2)个操作。。。我可以想象这会非常昂贵。。。如果可能的话,我会减少内部for循环的数量
我希望你在这个项目中好运,我希望你找到你想要的答案,同时我希望我的答案至少有一点帮助
相关问题 更多 >
编程相关推荐