Сохраняйте соединение при использовании ChromeDriver на веб-сайтах, которые требуют аутентификации - PullRequest
0 голосов
/ 30 января 2020

Я использую VBA и Selenium ChromeDriver для очистки данных на веб-сайте, который требует аутентификации.

Проблема в том, что ChromerDriver, похоже, перезапускается при любом прерывании кода (даже если это не ошибка, например, когда приложение запрашивает ввод у пользователя).

' Loads search page
Set chrome = New Selenium.ChromeDriver

Do
    chrome.get sfSearchURL

    If chrome.URL <> sfSearchURL Then 'If it is not in desired search page, prompts user to log in.
        intCont = MsgBox ("Log in and click OK")

        If intCont = vbCancel Then
            strErrorMsg = "Not logged in"
            Exit Function
        End If

    End If

Loop Until chrome.URL = sfSearchURL

Когда я загружаю страницу поиска без входа в систему, сервер загружает страницу входа вместо этого.

Проблемы:

Сначала , каждый раз, когда я открываю ChromeDriver, он открывает новый сеанс и забывает аутентификацию, поэтому у меня не может быть сеанса, мне приходится снова входить в систему при каждом выполнении поиска function.

Second , когда VBA показывает MsgBox и пользователь нажимает OK, переменная chrome теряет ссылку на объект, а в следующей строке (Loop Until) я получаю

ошибка времени выполнения 0: WebRequestError Невозможно подключиться к удаленному серверу

1 Ответ

0 голосов
/ 01 февраля 2020

Мои знания HTTP явно слабые, поэтому я могу быть не совсем точным, но я думаю, что я достаточно близко, чтобы заставить вас двигаться.

Переместите это за пределы вашего l oop:

chrome.get sfSearchURL

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

Это также приведет к переходу на MsgBox, в частности, он прекратит сеанс до его ветвления.


Я должен спросить об этом, хотя ...

"каждый раз, когда я открываю ChromeDriver, он открывает новый сеанс и забывает аутентификацию, поэтому я не могу иметь сеанс необходимость повторного входа в систему при каждом выполнении функции поиска "

  • Что точно вы подразумеваете под" открытым ChromeDriver ", и как точно Вы открываете его?

Эта строка:

Set chrome = New Selenium.ChromeDriver

... гарантированно отбрасывает любой ранее проведенный сеанс в chrome и открывает новый сеанс. Это по замыслу и именно то, что он должен делать, и что вы должны ожидать.

Если это часть большего l oop, то это пистолет для курения прямо здесь.

Можно создавать новые сеансы из одного экземпляра chrome, но я использую пользовательский класс с различными интерфейсами для инициализации отдельных одновременных сеансов, поскольку это делает мой проект более управляемым и согласованным.

Также. Вы действительно должны включить больше, если ваш код для нас, чтобы помочь вам в наших силах. Я должен сделать вывод и угадать, что было написано или не написано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...