地理位置覆盖在使用 Chrome WebDriver 的移动模拟中不起作用

问题描述 投票:0回答:1

我正在开发一个项目,需要使用 Chrome WebDriver 覆盖桌面和移动模拟中的地理位置。桌面模拟按预期工作,但移动模拟无法真正覆盖地理位置。

我使用以下代码来启动 Chrome 驱动程序:

chrome_options = Options()

mobile_emulation = {
    "deviceMetrics": { "width": 360, "height": 640, "pixelRatio": 3.0 },
    "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1" }
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)

params = {
        "latitude": 'some lat',
        "longitude": 'some lon',
        "accuracy": 100
    }

driver = webdriver.Chrome(service = Service(executable_path='some path'), options = chrome_options)
    driver.execute_cdp_cmd(
        "Browser.grantPermissions",
        {
            "origin": "https://www.google.cl/",
            "permissions": ["geolocation"],
        },
    )
driver.execute_cdp_cmd("Emulation.setGeolocationOverride", params)

driver.get('https://www.google.cl/')

地理位置覆盖在桌面模拟中运行良好。但是,当我添加移动模拟时,覆盖不起作用。也就是说,移动用户界面出现了,但是当我向下滚动查看 Google 识别的位置时,它仍然是我的实际位置。

环境:Linux、Chrome v114(最新的 Chrome 版本不会覆盖桌面或移动模拟中的地理位置)

任何人都可以帮助我理解为什么地理位置覆盖在移动模拟中不起作用以及是否可以修复它?

google-chrome selenium-webdriver geolocation mobileemulation
1个回答
0
投票

这是用于覆盖地理位置的完整 https://github.com/seleniumbase/SeleniumBase 脚本。

pip install seleniumbase
,然后使用
pytest
运行。

对于移动版本,运行时使用

pytest --mobile

from seleniumbase import BaseCase
BaseCase.main(__name__, __file__)


class TestGeolocation(BaseCase):
    def tearDown(self):
        self.save_teardown_screenshot()  # If test fails, or if "--screenshot"
        if self.is_chromium() and not self._multithreaded:
            # Reset Permissions and GeolocationOverride
            try:
                self.open("about:blank")
                self.execute_cdp_cmd("Emulation.setGeolocationOverride", {})
                self.execute_cdp_cmd("Browser.resetPermissions", {})
            except Exception:
                pass
        super().tearDown()

    def test_geolocation(self):
        self.execute_cdp_cmd(
            "Browser.grantPermissions",
            {
                "origin": "https://www.openstreetmap.org/",
                "permissions": ["geolocation"],
            },
        )
        self.execute_cdp_cmd(
            "Emulation.setGeolocationOverride",
            {
                "latitude": 48.87645,
                "longitude": 2.26340,
                "accuracy": 100,
            },
        )
        self.open("https://www.openstreetmap.org/")
        self.click("span.geolocate")
        self.assert_url_contains("48.87645/2.26340")
        self.save_screenshot_to_logs()
        self.sleep(2.5)

(在 Chrome 122 上测试,适用于桌面和移动格式。)

© www.soinside.com 2019 - 2024. All rights reserved.