Вход на сайт (имя пользователя и пароль стираются при нажатии входа)

Я использую следующий код для ввода имени пользователя и пароля на веб-сайт и входа в систему. Он работает хорошо и вводит имя пользователя и пароль, однако, когда код запускается при нажатии кнопки входа, имя пользователя и пароль стираются и страница сбрасывается снова запросить данные учетной записи. Любая помощь, чтобы обойти эту проблему?

Sub Wblogin()
Dim ie As SHDocVw.InternetExplorer
Dim idoc As MSHTML.HTMLDocument
Dim username As HTMLInputElement
Dim Passw As HTMLInputElement
Dim signin As Object

Set ie = New SHDocVw.InternetExplorer
ie.Visible = True
ie.navigate "https://sellercenter.daraz.lk/seller/login?redirect_url=https%3A%2F%2Fsellercenter.daraz.lk%2Fproduct%2Fpublish%2Findex%3Fspm%3Da2o7e.10547927.old-navigation.3.50f42a97yqWAyz"

Do While ie.readyState <> READYSTATE_COMPLETE
   Application.StatusBar = "Loading"
Loop
Set idoc = ie.document

Set username = idoc.getElementById("TPL_username")
username.Value = "cobbler2050@gmail.com"

Set Passw = idoc.getElementById("TPL_password")
Passw.Value = "Cobbler1981"


Set signin = idoc.getElementsByClassName("next-btn next-btn-normal next-btn-medium btn")
signin(0).Click


End Sub

Всего 1 ответ


Этот сайт создан с использованием библиотеки React JS. Когда пользователь взаимодействует с элементом Input, React захватывает значение и сохраняет его в другом месте. Когда форма отправлена, фактические элементы ввода не используются. Вам нужно знание внутренних структур React, чтобы делать то, что вы хотите. Я провел это исследование и создал скребок в VBA, который успешно работал с веб-сайтом на основе React. Это работало в течение нескольких лет, пока веб-сайт не был обновлен, чтобы отказаться от поддержки Internet Explorer.

Теперь я использую WebDriver и JsonWireProtocol для автоматизации очистки веб-сайтов от VBA.

Вместо Internet Explorer в моем случае скребок запускает Chromedriver с:

Shell "chromedriver.exe", vbMinimizedNoFocus

Это запускает крошечный веб-сервер, прослушивающий порт localhost 9515. Затем команды в формате JSON можно отправлять на localhost: 9515 через GET и POST, чтобы запустить браузер, перейти к URL-адресу и взаимодействовать с веб-страницей с помощью имитированных нажатий клавиш.

Использование GET-запросов в JsonWireProtocol проблематично, поскольку ответы GET являются кэшируемыми. В VBA я использую объект ServerXMLHTTP60 для отправки запросов, потому что он обходит кэширование.


Есть идеи?

10000