Search code examples
pythonselenium-webdriverselenium-webdriver-python

Python Selenium Google click "I agree" button


I am trying to get some data from Google but it I get the "before you continue" google popup. I am trying to make selenium locate the button and click it and return to the getting data but it seems even if I have the button ID in the code it doesn't find it

"""
Search on Google and returns the list of PAA questions in SERP.
"""
def newSearch(browser,query):
    if lang== "en":
        browser.get("https://www.google.com?hl=en")
        WebDriverWait(browser, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe")))
        agree = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="L2AGLb"]/span/span'))) 
        agree.click()
        browser.switch_to_default_content()
        searchbox = browser.find_element_by_xpath("//input[@aria-label='Search']")
    else:
        browser.get("https://www.google.com?hl=es")
        searchbox = browser.find_element_by_xpath("//input[@aria-label='Buscar']")
    
    searchbox.send_keys(query)
    sleepBar(2)
    tabNTimes()
    if lang== "en":
        searchbtn = browser.find_elements_by_xpath("//input[@aria-label='Google Search']")
    else:
        searchbtn = browser.find_elements_by_xpath("//input[@aria-label='Buscar con Google']")
    try:
        searchbtn[-1].click()
    except:
        searchbtn[0].click()
    sleepBar(2)
    paa = browser.find_elements_by_xpath("//span/following-sibling::div[contains(@class,'match-mod-horizontal-padding')]")
    hideGBar()
    return paa

Solution

  • Try clicking the inner div of the button itself. HTML of the agree popup:

    <button id="L2AGLb" class="tHlp8d" data-ved="0ahUKEwj89p7Swob1AhVBxhoKHS0gDxIQiZAHCCE">
        <div class="QS5gu sy4vM" role="none">
            Acepto
        </div>
    </button>
    

    Your selector should look like this:

    (By.CSS_SELECTOR, "#L2AGLb > div")
    

    Here is a working full example:

    def test_google_...(self):
        driver = self.driver
    
        if self.LANGUAGE == "en":
            driver.get("https://www.google.com?hl=en")
        else:
            driver.get("https://www.google.com?hl=es")
    
        WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "#L2AGLb > div"))
        )
        driver.find_element(By.CSS_SELECTOR, "#L2AGLb > div").click()
    
        WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, 'input[name="q"]'))
        )
    
        query = "your search query"
        driver.find_element(By.CSS_SELECTOR, 'input[name="q"]').send_keys(query)
        driver.find_element(By.CSS_SELECTOR, 'input[name="q"]').send_keys(Keys.RETURN)
    
        ...