Вход на сайт (имя пользователя и пароль стираются при нажатии входа) - PullRequest
0 голосов
/ 12 января 2020

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

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 Ответ

0 голосов
/ 15 января 2020

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

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

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

Shell "chromedriver.exe", vbMinimizedNoFocus

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

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

...