Une exception s'est produite: l'objet TypeError 'WebElement' n'est pas en indice

Aug 16 2020

Bonjour les gars, je suis vraiment un débutant en python et j'écris juste un morceau de code qui ouvre Whatsapp

et vous lui donnez le nom de la personne et le message envoie alors combien de fois vous voulez.

Mais quand je commence à déboguer le code, cela me donne ceci:

Exception has occurred: TypeError 'WebElement' object is not subscriptable File "E:\Iliya\My Courses\Python\Projects\Whatsapp Robot\Whatsapp_Bot.py", line 15, in <module> msg = driver.find_element_by_class_name('_3FRCZ')[1]

# ======================================
from selenium import webdriver
PATH = 'C:\\Program Files (x86)\\chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.get('https://web.whatsapp.com/')

input("Please Press The 'Enter' Button... ")
name = input("Enter Person's Name: ")
msg = input("Enter The Message: ")
counter = int(input("How Many Times Do You Want To Repeat The Message?:  "))

user = driver.find_element_by_xpath('//span[@title = "{}"]'.format(name))
user.click()
msg = driver.find_element_by_class_name('_3FRCZ')[1]
for i in range(counter):
    msg.send_keys(msg)
    button = driver.find_element_by_class_name('_1U1xa')[0]
    button.click()

les gars s'il vous plaît quelqu'un de bon en python répondez-moi !!!

Réponses

1 DebanjanB Aug 16 2020 at 05:47

find_element_by_class_name ()

find_element_by_class_name() trouve un élément par nom de classe.

Dans la ligne de code:

msg = driver.find_element_by_class_name('_3FRCZ')[1]

driver.find_element_by_class_name('_3FRCZ')renverrait un seul WebElement . Par conséquent, vous ne pourrez pas y attacher un index ou en d'autres termes le rendre indexable.


Solution

Il existe deux solutions:

  • Retirez l' index, c'est-à [1]- dire que votre code sera tout bon.

  • Au lieu de cela, driver.find_element_by_class_name()vous devez utiliser find_elements_by_class_name(). Donc, effectivement, votre ligne de code sera:

    msg = driver.find_elements_by_class_name('_3FRCZ')[1]