![](/img/trans.png)
[英]Send whatsapp message to contacts using Python but getting an error: InvalidSelectorException: Message: invalid selector: Unable to locate an element
[英]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.