Python Selenium `execute_cdp_cmd` работает только при первом запуске

Я пытаюсь изменить геолокацию устройства с помощью Selenium Python (с Selenium wire для перехвата http-запросов) с помощью:

from seleniumwire import webdriver

options = webdriver.EdgeOptions()
options.accept_insecure_certs = True
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Edge(seleniumwire_options = {
                        'port': 12345, 'disable_encoding': True}, options=options)

# List of coordinates
lats = [44.55, 43.63, 52.25, 45.48, 47.35]
longs = [-77.33, -80.33, -81.62, -76.81, -84.62]

for i in range(len(lats)):
    coordinates = {
        "latitude": lats[i],
        "longitude": longs[i],
        "accuracy": i + 1
    }

    driver.execute_cdp_cmd("Emulation.setGeolocationOverride", coordinates)
    driver.get(some_website)

    # I can see the coordinates passed to the `execute_cdp_cmd` changed every loop
    print(coordinates)

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пробовали использовать Emulation.clearGeolocationOverride до вызова Emulation.setGeolocationOverride?

from seleniumwire import webdriver

options = webdriver.EdgeOptions()
options.accept_insecure_certs = True
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Edge(seleniumwire_options = {
                        'port': 12345, 'disable_encoding': True}, options=options)

# List of coordinates
lats = []
longs = []

for i in range(len(lats)):
    coordinates = {
        "latitude": lats[i],
        "longitude": longs[i],
        "accuracy": i + 1
    }

    driver.execute_cdp_cmd("Emulation.clearGeolocationOverride")
    driver.execute_cdp_cmd("Emulation.setGeolocationOverride", coordinates)
    driver.get(some_website)

    print(coordinates)

Нет, это не работает. Также код должен быть driver.execute_cdp_cmd("Emulation.clearGeolocationOverride", {}), так как execute_cdp_cmd требует 2 аргумента.

legenddaniel 18.11.2022 18:10

Хорошо. Можете ли вы добавить немного латов и длин в свой вопрос? Это поможет при тестировании.

Life is complex 18.11.2022 18:13

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

legenddaniel 18.11.2022 18:38

Спасибо, что приняли этот ответ.

Life is complex 18.11.2022 21:32

Другие вопросы по теме