Как получить значение переменной из Javascript с помощью Selenium с Python - PullRequest
0 голосов
/ 04 марта 2020

Используя Selenium, ниже приведен код, который я использую Python для получения моих гео-координат через веб-интерфейс навигатора:

        coordinates = driver.execute_script(
        " return () => {                                            " +
        "   var savedCoordinates;                                   " +
        "                                                           " +
        "   navigator.geolocation.getCurrentPosition(               " +
        "       (pos) => savedCoordinates = pos.coords,             " +
        "       error,                                              " +
        "       options);                                           " +
        "                                                           " +
        "   let options = {                                         " +
        "       enableHighAccuracy: true,                           " +
        "       timeout: 5000,                                      " +
        "       maximumAge: 0                                       " +
        "   };                                                      " +
        "                                                           " +
        "   function error(err) {                                   " +
        "       console.warn(`ERROR(${err.code}): ${err.message}`); " +
        "   };                                                      " +
        "                                                           " +
        " return savedCoordinates;                                  " +
        " }                                                         " ) 
        print(coordinates)

Ожидаемый результат: {latitude: XXX.XXX, longitude XX.XXXX}

Фактический результат: {}

Может кто-нибудь помочь мне выяснить, как я могу получить свои гео-координаты, используя этот метод?

1 Ответ

0 голосов
/ 04 марта 2020

Он должен работать без return () => { }

    coordinates = driver.execute_script(
    "   var savedCoordinates;                                   " +
    "                                                           " +
    "   navigator.geolocation.getCurrentPosition(               " +
    "       (pos) => savedCoordinates = pos.coords,             " +
    "       error,                                              " +
    "       options);                                           " +
    "                                                           " +
    "   let options = {                                         " +
    "       enableHighAccuracy: true,                           " +
    "       timeout: 5000,                                      " +
    "       maximumAge: 0                                       " +
    "   };                                                      " +
    "                                                           " +
    "   function error(err) {                                   " +
    "       console.warn(`ERROR(${err.code}): ${err.message}`); " +
    "   };                                                      " +
    "                                                           " +
    " return savedCoordinates;                                  " ) 

    print(coordinates)

На мой взгляд, () => {} определяет только функцию, но не запускает ее - поэтому возвращает эту функцию, а не результат функции. Вам может понадобиться (), чтобы запустить его

return (() => {...code...})()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...