Đã xảy ra ngoại lệ: Đối tượng TypeError 'WebElement' không thể chỉ định được

Aug 16 2020

Xin chào các bạn, tôi thực sự là một người mới làm quen với python và tôi vừa viết một đoạn mã để mở Whatsapp

và bạn cung cấp cho nó tên của người đó và tin nhắn sau đó sẽ gửi bao nhiêu lần bạn muốn.

Nhưng khi tôi bắt đầu gỡ lỗi mã, nó cho tôi điều này:

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()

các bạn làm ơn ai đó giỏi python trả lời giúp mình với !!! 🙏🙏

Trả lời

1 DebanjanB Aug 16 2020 at 05:47

find_element_by_class_name ()

find_element_by_class_name() tìm một phần tử theo tên lớp.

Trong dòng mã:

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

driver.find_element_by_class_name('_3FRCZ')sẽ trả về một WebElement duy nhất . Do đó, bạn sẽ không thể đính kèm một chỉ mục vào nó hay nói cách khác là làm cho nó có thể đăng ký được.


Giải pháp

Có hai giải pháp:

  • Loại bỏ chỉ mục tức là [1]mã của bạn sẽ tốt.

  • Như một sự thay thế, thay vì driver.find_element_by_class_name()bạn cần sử dụng find_elements_by_class_name(). Vì vậy, hiệu quả dòng mã của bạn sẽ là:

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