VBA, FindelementbyXpath, NoSuchElementError, Когда я копирую и вставляю xpath, мой код работает хорошо. Однако, когда я снова воспроизведу свой код, произойдет ошибка..почему?

#html #vba #selenium

Вопрос:

я хочу сделать «Прямую отправку сообщений в Instagram MECRO»

URL = www.instagram.com/direct/inbox
driver.FindElementByXPath("/html/body/div[1]/section/div/div[2]/div/div/div[1]/div[1]/div/div[3]/button/div/svg").Click

КОГДА я открываю ссылку и копирую и вставляю xpath, мой код работает хорошо, однако после запуска один раз запустите мой код снова,

тогда «NoSuchElementError» … почему…? что мне делать?..

(я также использую селен)

полный код :

 Sub Sending_DM()
Dim driver As Selenium.ChromeDriver
Dim username As String, Login_ID As String, Login_PW As String




Set driver = New Selenium.ChromeDriver
driver.Start
driver.Wait (2000)


username = Sheet3.Range("B2").Value    'B2 = User ID = username
Login_ID = Sheet3.Range("a1").Value
Login_PW = Sheet3.Range("a2").Value

driver.Get "https://www.instagram.com/" amp; username


'-----------Login
driver.FindElementByXPath("//*[@id=""loginForm""]/div/div[1]/div/label/input").SendKeys (Login_ID) ' MY INSTAGRAM ID
driver.FindElementByXPath("//*[@id=""loginForm""]/div/div[2]/div/label/input").SendKeys (Login_PW) ' My instagram PW
driver.FindElementByXPath("//*[@id=""loginForm""]/div/div[3]").Click

driver.Wait (4000)

driver.Get "https://www.instagram.com/direct/inbox/"


'-----------Sending DM
driver.FindElementByXPath("/html/body/div[1]/section/div/div[2]/div/div/div[1]/div[1]/div/div[3]/button/div/svg").Click
driver.FindElementByXPath("/html/body/div[6]/div/div/div[2]/div[1]/div/div[2]/input").SendKeys (Sheet3.Range("c1"))
driver.FindElementByXPath("/html/body/div[6]/div/div/div[1]/div/div[2]/div/button/div").Click
driver.Wait (1000)

driver.FindElementByXPath("/html/body/div[1]/section/div/div[2]/div/div/div[2]/div[2]/div/div[2]/div/div/div[2]/textarea").SendKeys (Sheet3.Range("c2").Value) 'Sheet3.range("c2") = recipient ID
driver.FindElementByXPath("/html/body/div[1]/section/div/div[2]/div/div/div[2]/div[2]/div/div[2]/div/div/div[3]/button").Click

Sheet3.Range("d2") = "o" 'Sending Check

End ()
 

Комментарии:

1. Они, вероятно, делают html динамичным, чтобы специально не позволять людям делать то, что вы пытаетесь сделать.

2. @braX, значит, я не могу решить эту проблему?

3. Можете ли вы поделиться кодом, который вы пробовали, и полной трассировкой стека ошибок ? похоже, мы столкнулись с проблемой локаторов

4. @cruisepandey я делюсь кодом!

Ответ №1:

хорошо, мы столкнулись с проблемой неправильного локатора.

замените эту строку

 driver.FindElementByXPath("/html/body/div[1]/section/div/div[2]/div/div/div[1]/div[1]/div/div[3]/button/div/svg").Click
 

с этим :

 driver.FindElementByXPath("/html/body/div[1]/section/div/div[2]/div/div/div[1]/div[1]/div/div[3]/button/div/*").Click