Search code examples
google-chrome-headless

Headless Chrome not detecting css elements


I am finding headless Chrome does not seem to detect elements. The following script does not work.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui  import WebDriverWait

options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(chrome_options=options)
driver.set_window_size(1024, 600)
driver.maximize_window()

driver.get('https://www.sportsbet.com.au/betting/soccer?LeftNav')

wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".link")))
print('hi')

Change to not headless.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()
driver.set_window_size(1024, 600)
driver.maximize_window()

driver.get('https://www.sportsbet.com.au/betting/soccer?LeftNav')

wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".link")))
print('test2')

Success!

I get for headless:

line 49, in <module>
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".link")))
  File "C:\Users\Django\AppData\Local\Continuum\miniconda3\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

Change css: div:nth-child(1) > a > span.team-name.ib

I still get same error. Why is it doing this?


Solution

  • It seems to redirect you if you are using headless browser.

    Add:

    user_agent = 'I LIKE CHOCOLATE'
    options.add_argument(f'user-agent={user_agent}')
    

    Now run:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui  import WebDriverWait
    
    options = Options()
    options.add_argument("--headless")
    user_agent = 'I LIKE CHOCOLATE'
    options.add_argument(f'user-agent={user_agent}')
    driver = webdriver.Chrome(chrome_options=options)
    driver.set_window_size(1024, 600)
    options.add_argument("--headless");
    driver.maximize_window()
    
    driver.get('https://www.sportsbet.com.au/betting/soccer?LeftNav')
    
    wait = WebDriverWait(driver, 10)
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".link")))
    print('hi')
    

    SUCCESS!