我创建了一个浏览器抓取脚本,该脚本使用python中的硒在WhatsApp网站上发送消息,但昨天注意到它发送了一半消息或未发送消息。对其进行了调试,发现浏览器窗口必须处于活动状态才能发送消息,如下所示。
def send_message(msg):
whatsapp_msg = driver.find_element_by_class_name(send_messageClass)
for part in msg.split('\n'):
whatsapp_msg.send_keys(part)
ActionChains(driver).key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(Keys.SHIFT).key_up(Keys.ENTER).perform()
time.sleep(1)
ActionChains(driver).send_keys(Keys.RETURN).perform()
time.sleep(1)
答案 0 :(得分:0)
find_element_by_class_name
只是从DOM中检索元素。它不能保证它是否可见。
为此,将an explicit wait与元素的可见性结合使用作为预期条件:
selenium.webdriver.support.expected_conditions.visibility_of(element)
这将等待元素可见,直到达到指定的超时时间为止。这是一个超时为60秒的示例:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EXP_CON
...
wait = WebDriverWait(driver, 60)
whatsapp_msg = driver.find_element_by_class_name(send_messageClass)
visible_whatsapp_msg = wait.until(EXP_CON.visibility_of(whatsapp_msg))