Good afternoon,
I wanted to share my experience with setting up headless Chrome in a Docker container, which fixed my headless issue and helped with reCAPTCHA.
Steps I Followed:
I first ran some commands to ensure Google Chrome was installed:
docker exec -it container_name /bin/bash
Check if Google Chrome is installed by running:
google-chrome --version
Then, I opened a Python shell:
python
Next, I ran this code to take a screenshot of the Google homepage:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time
# Configure Chrome options to run headless
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless") # Run in headless mode
chrome_options.add_argument("--no-sandbox") # Bypass OS security model
chrome_options.add_argument("--disable-dev-shm-usage") # Overcome limited resource problems
chrome_options.add_argument("--disable-gpu") # Disable GPU (for headless stability)
# Set up the WebDriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
# Open a test page
driver.get("https://www.google.com")
# Wait for the page to load
time.sleep(2)
# Take a screenshot and save it to a file
driver.save_screenshot("snapshot.png")
print("Screenshot saved as snapshot.png")
# Close the browser
driver.quit()
I ran pwd to check my current directory and then downloaded the screenshot to my PC. If I was able to see the Google homepage, then Chrome was working fine.
If the above worked, I modified my Chrome options as follows to improve compatibility with reCAPTCHA:
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless") # Run in headless mode
chrome_options.add_argument("--no-sandbox") # Bypass OS security model
chrome_options.add_argument("--disable-dev-shm-usage") # Overcome limited resource problems
chrome_options.add_argument("--disable-gpu") # Disable GPU (for headless stability)
# Add a common user-agent to mimic a real browser, especially in case of reCAPTCHA
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
# Disable automation flags to avoid detection by reCAPTCHA
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
# Set up the WebDriver with the configured options
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
This should be fine. If you have any inquiries, message me. If it does not work, drop a comment on where you face challenges. Please don't minus my count. Thank you!