WhatsApp Web Automation с Python Selenium (невозможно найти элемент) - PullRequest
0 голосов
/ 09 марта 2020

Я использую python и селен для отправки сообщения цели.

Я могу успешно открыть веб-сайт WhatsApp, но после этого я не могу открыть папку входящих сообщений контакта, которому я хочу отправить сообщение. .

Вот код на данный момент. Первая часть является обычной, где я должен открыть веб-страницу. Это случилось без проблем. Следующая часть - открыть контакт, чтобы отправить входящее сообщение. Я попробовал два разных метода для этого. Ни один из них не работал.

Общая часть:

#WhatsApp Automation Project
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC 
from time import sleep

#Open WhatsApp web
driver =  webdriver.Chrome('D:/Drivers/chromedriver')
driver.get('https://web.whatsapp.com')


#The code should wait sometime for the user to scan the bar code.
sleep(15)
print('Code ended its pause.')

#chose whom to send messaage.
target = 'Name_in_Contacts'

#choose the message to send.
string = 'Guess who learned to autoate WhatsApp using Python.'

Метод 1:

# what I initially thought of doing

search  = driver.find_element_by_class_name("_3FeAD uu8jX")
#class_name is the name of the label of the search box in whatsapp web
#alternatively I had used class name('_3u328 copyable-text selectable-text') , a div class inside the  #label class\
#both the class name give the same error.
#check the image of the HTML code.
search.send_keys(target)

Image of HTML code.

Выдает ошибку:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"._3FeAD uu8jX"}
  (Session info: chrome=80.0.3987.132)

Метод 2: Этот метод скопирован из одного из решений из Stack OverFlow.

#Stack OverFlow method. Didn't work.

#Open searcch box
search = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.CLASS_NAME, "_3u328 copyable-text selectable-text")))
#Alternatively, the other class_name of label was also used.
#Both gave the same error.
search.send_keys(target)

Выдает ошибку:

raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

Прошло уже больше месяца, и я не могу решить проблему.

Пожалуйста, не закрывайте вопрос, сказав, что он уже задан. Я знаю, что есть множество вопросов по этой теме c, но ни один из них не помог мне, и было бы очень полезно, если бы вы дали мне решение, конкретное c для моей проблемы.

Заранее благодарю.

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Наконец-то я получил ответ.

Я понимаю, что нет смысла открывать окно поиска. При вводе имени в поле поиска имя появляется только сверху, оно не может выбрать ни одного из контактов.

Мы должны найти имя контакта в центральной левой части экрана.

Для этого используйте:

user = driver.find_element_by_xpath("//span[@title='{}']".format(name))
user.click()

Открывает почтовый ящик.

0 голосов
/ 10 марта 2020

надеюсь, это поможет вам.

element = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[text()='Search or start new chat']/preceding-sibling::button]");
element.click();
//again wait  and then use sendkeys to select or search contact
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...