Hello Dev Community,
I'm currently working on Selenium WebDriver automation with Python, focusing on handling permission pop-ups in headless mode on a Linux machine. Specifically, I want to handle the location permission alert and allow it to make my tests run smoothly.
In non-headless mode, the following code works perfectly:
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.chrome.options import Options as ChromeOptions from time import sleep # Chrome options setup chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--incognito') # Configure content settings to disable notifications and geolocation content_settings = {'notifications': 0, 'geolocation': 0} profile = {'managed_default_content_settings': content_settings} prefs = {'profile': profile} chrome_options.add_experimental_option('prefs', prefs) # Add arguments to disable notifications, geolocation, and media stream chrome_options.add_argument('--disable-notifications') chrome_options.add_argument('--disable-geolocation') chrome_options.add_argument('--use-fake-ui-for-media-stream') path = r"C:\Program Files (x86)\chromedriver-win64\chromedriver.exe" # WebDriver setup using WebDriver Manager service = ChromeService(path) driver = webdriver.Chrome(service=service, options=chrome_options) driver.maximize_window() # Navigate to the specified URLs driver.get('https://www.cleartrip.com/') driver.get('https://whatmylocation.com/') sleep(15)
However, when I switch to headless mode on a Linux machine, the location permission alert is not being handled as expected. Here's the headless mode code:
def create_headless_chrome_driver(): chrome_options = ChromeOptions() chrome_options.add_argument('--start-maximized') chrome_options.add_argument('--headless') # Allow geolocation chrome_options.binary_location = CHROME_BINARY_PATH chrome_options.add_argument('window-size=1920x1080') chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") # Handling geolocation chrome_options.add_argument('--incognito') # Configure content settings to disable notifications and geolocation content_settings = {'notifications': 1, 'geolocation': 1} profile = {'managed_default_content_settings': content_settings} prefs = {'profile': profile} chrome_options.add_experimental_option('prefs', prefs) # Add arguments to disable notifications, geolocation, and media stream chrome_options.add_argument('--disable-notifications') chrome_options.add_argument('--disable-geolocation') chrome_options.add_argument('--use-fake-ui-for-media-stream') service = ChromeService(executable_path=CHROMEDRIVER_PATH) driver = webdriver.Chrome(service=service, options=chrome_options) return driver
**
Top comments (1)
Could you use python highlight code blocks like