簡體   English   中英

錯誤:消息:沒有這樣的元素:無法找到元素 Whatsapp

[英]Error: Message: no such element: Unable to locate element Whatsapp

這是我的代碼:

def enviar_mensagem(nav):
    #Lê uma planilha do excel. Na coluna 'Concat2' envia o link da célula para o navagedor que envia a mensagem para o número da lista.
     mailing = pd.read_excel('mailing.xlsx') #STEP1)
     for i in range(len(mailing)):
        URL = mailing['Concat2'][i]#STEP3
        print(URL)
        nav.get(URL)
        find_elements_side(nav)
        time.sleep(1)
        entra = nav.find_element(By.XPATH, '/html/body/div[1]/div/div/div[4]/div/footer/div[1]/div/span[2]/div/div[2]/div[1]/div/div[2]')
        entra.send_keys(Keys.ENTER)
        time.sleep(2)#STEP3
        path = "/html/body/div[1]/div/span[2]/div/span/div/div/div/div/div/div[2]/div/div/div/div"
        #WebDriverWait(nav, 5).until(EC.element_to_be_clickable((By.XPATH, path))).click()

我正在嘗試開發一個 Whatsapp 消息觸發器。 我有一張帶有單元格號碼列表的 xlsx 表。 對於每個手機號碼,我將發送一條預定義的消息並生成一個鏈接讓司機進入 - 例如(“https://web.whatsapp.com/send?phone=551988006472&text=Olá,%20Cris.%20Você%20está% 20recebendo%20um%20teste%20de%20automação.%20Obrigado%20pela%20compreensão%20e%20uma%20ótima%20sexta")。 我面臨的問題是:當手機號碼沒有 Whatsapp 帳戶時,我的代碼崩潰並且程序停止。 那么,如何在不停止程序的情況下跳過錯誤(手機號碼沒有whatsapp帳戶)? 向我顯示的消息錯誤:

Traceback (most recent call last):
  File "C:\Users\Valor\Documents\Disparador\working.py", line 54, in <module>
    main()
  File "C:\Users\Valor\Documents\Disparador\working.py", line 53, in main
    navigation_whatsapp(nav)
  File "C:\Users\Valor\Documents\Disparador\working.py", line 30, in navigation_whatsapp
    enviar_mensagem(nav)
  File "C:\Users\Valor\Documents\Disparador\working.py", line 41, in enviar_mensagem
    entra = nav.find_element(By.XPATH, '/html/body/div[1]/div/div/div[4]/div/footer/div[1]/div/span[2]/div/div[2]/div[1]/div/div[2]')
  File "C:\Users\Valor\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1251, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\Valor\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 430, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Valor\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[1]/div/div/div[4]/div/footer/div[1]/div/span[2]/div/div[2]/div[1]/div/div[2]"}
  (Session info: chrome=102.0.5005.63)
Stacktrace:
Backtrace:
    Ordinal0 [0x009AD953+2414931]
    Ordinal0 [0x0093F5E1+1963489]
    Ordinal0 [0x0082C6B8+837304]
    Ordinal0 [0x00859500+1021184]
    Ordinal0 [0x0085979B+1021851]
    Ordinal0 [0x00886502+1205506]
    Ordinal0 [0x008744E4+1131748]
    Ordinal0 [0x00884812+1198098]
    Ordinal0 [0x008742B6+1131190]
    Ordinal0 [0x0084E860+976992]
    Ordinal0 [0x0084F756+980822]
    GetHandleVerifier [0x00C1CC62+2510274]
    GetHandleVerifier [0x00C0F760+2455744]
    GetHandleVerifier [0x00A3EABA+551962]
    GetHandleVerifier [0x00A3D916+547446]
    Ordinal0 [0x00945F3B+1990459]
    Ordinal0 [0x0094A898+2009240]
    Ordinal0 [0x0094A985+2009477]
    Ordinal0 [0x00953AD1+2046673]
    BaseThreadInitThunk [0x76706739+25]
    RtlGetFullPathName_UEx [0x77978FEF+1215]
    RtlGetFullPathName_UEx [0x77978FBD+1165]

在 Python 中,您可以使用try / except來攔截發生的異常(例如,用於檢查或抑制)。

例如,

try:
    print(1/0) # This will raise a ZeroDivisionError.
except ZeroDivisionError: # We specify which class of exceptions we're interested in catching.
    print('I divided by zero.')

這將運行try塊內的代碼,如果發生指定類型的異常(在本例中為ZeroDivisionError ),則運行except塊內的代碼,而不是傳播錯誤並可能使程序崩潰。

在你的情況下,這條線

entra = nav.find_element(By.XPATH, '/html/body/div[1]/div/div/div[4]/div/footer/div[1]/div/span[2]/div/div[2]/div[1]/div/div[2]')

正在引發selenium.common.exceptions.NoSuchElementException 因此,您可以通過以下方式攔截此類異常:

try:
    entra = nav.find_element(By.XPATH, '/html/body/div[1]/div/div/div[4]/div/footer/div[1]/div/span[2]/div/div[2]/div[1]/div/div[2]')
except selenium.common.exceptions.NoSuchElementException:
    # Handle the error somehow.

但是,這只會捕獲NoSuchElementException異常。 如果出現其他一些 selenium 類型,則錯誤將傳播並且您的程序將崩潰。 要解決這個問題,您可以查看NoSuchElementException的繼承層次結構:

> selenium.common.exceptions.NoSuchElementException.__mro__
(selenium.common.exceptions.NoSuchElementException,
 selenium.common.exceptions.WebDriverException,
 Exception,
 BaseException,
 object)

所以,你可以通過

except selenium.common.exceptions.WebDriverException:

您可能會想通過捕獲所有Exception來進一步擴展它。 但是,這通常是不好的做法。 您應該盡可能具體地說明您想要捕獲的異常類型。 畢竟,例如,如果由於犯的錯誤(即不是由 selenium 引發的錯誤)而在您的try塊中發生異常怎么辦? 您希望該異常使您的程序崩潰,以便您知道要修復錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM