Селен не работает должным образом, если вкладка не отображается в python - PullRequest
0 голосов
/ 06 января 2020

Я создал скрипт очистки браузера, который отправляет сообщение в WhatsApp web с использованием селена в python, но вчера заметил, что отправляет половину сообщения или не отправляет сообщения. Отладил его и обнаружил, что окно браузера должно быть активным для отправки сообщений, мой код отправки сообщения, как показано ниже.

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)

1 Ответ

0 голосов
/ 06 января 2020

find_element_by_class_name просто извлекает элемент из DOM. Он не гарантирует, если он виден.

Для этого используйте явное ожидание в сочетании с видимостью элемента в качестве ожидаемого условия:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...