Я пытаюсь изменить геолокацию устройства с помощью 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)
Однако фактическая геолокация всегда будет первыми координатами. Единственный способ - создавать новый драйвер в каждом цикле, но это очень плохая производительность. Что я делаю неправильно?
Вы пробовали использовать 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 аргумента.