Search code examples
pythonseleniumselenium-webdriverdrop-down-menuwebdriver

Selenium search by tag name option


I'm trying to get all data from a website called Correios. On this website, I need to handle some dropdowns which I'm having some issues with, like: It's returning a list with a bunch of empty strings.

chrome_path = r"C:\\Users\\Gustavo\\Desktop\\geckodriver\\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
lista_x = []
driver.get("http://www2.correios.com.br/sistemas/agencias/")
driver.maximize_window()

dropdownEstados = driver.find_elements_by_xpath("""//*[@id="estadoAgencia"]""")

optEstados = driver.find_elements_by_tag_name("option")

for valores in optEstados:
    print(valores.text.encode())

And what I get from that is:

b''
b'ACRE'
b'ALAGOAS'
b'AMAP\xc3\x81'
b'AMAZONAS'
b'BAHIA'
b'CEAR\xc3\x81'
b'DISTRITO FEDERAL'
b'ESP\xc3\x8dRITO SANTO'
b'GOI\xc3\x81S'
b'MARANH\xc3\x83O'
b'MINAS GERAIS'
b'MATO GROSSO DO SUL'
b'MATO GROSSO'
b'PAR\xc3\x81'
b'PARA\xc3\x8dBA'
b'PERNAMBUCO'
b'PIAU\xc3\x8d'
b'PARAN\xc3\x81'
b'RIO DE JANEIRO'
b'RIO GRANDE DO NORTE'
b'ROND\xc3\x94NIA'
b'RORAIMA'
b'RIO GRANDE DO SUL'
b'SANTA CATARINA'
b'SERGIPE'
b'S\xc3\x83O PAULO'
b'TOCANTINS'
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''

How can I remove the empty b" "?


Solution

  • If I understand it right, you want to locate all these options:

    Enter image description here

    Try this XPath expression to locate the dropdown elements:

    //*[@id="estadoAgencia"]/option
    

    The code sample:

    chrome_path = r"C:\\Users\\Gustavo\\Desktop\\geckodriver\\chromedriver.exe"
    driver = webdriver.Chrome(chrome_path)
    lista_x = []
    driver.get("http://www2.correios.com.br/sistemas/agencias/")
    driver.maximize_window()
    
    dropdownEstados = driver.find_elements_by_xpath("//*[@id='estadoAgencia']")
    
    # Find elements in dropdown
    optEstados = driver.find_elements_by_xpath("//*[@id='estadoAgencia']/option")
    
    for valores in optEstados:
        print(valores.text.encode())
    

    Via this XPath expression you will get all dropdown elements, without empty strings except one, which is in this dropdown. Output:

    b''
    b'ACRE'
    b'ALAGOAS'
    b'AMAP\xc3\x81'
    b'AMAZONAS'
    b'BAHIA'
    b'CEAR\xc3\x81'
    b'DISTRITO FEDERAL'
    b'ESP\xc3\x8dRITO SANTO'
    b'GOI\xc3\x81S'
    b'MARANH\xc3\x83O'
    b'MINAS GERAIS'
    b'MATO GROSSO DO SUL'
    b'MATO GROSSO'
    b'PAR\xc3\x81'
    b'PARA\xc3\x8dBA'
    b'PERNAMBUCO'
    b'PIAU\xc3\x8d'
    b'PARAN\xc3\x81'
    b'RIO DE JANEIRO'
    b'RIO GRANDE DO NORTE'
    b'ROND\xc3\x94NIA'
    b'RORAIMA'
    b'RIO GRANDE DO SUL'
    b'SANTA CATARINA'
    b'SERGIPE'
    b'S\xc3\x83O PAULO'
    b'TOCANTINS'
    

    Note: the first element is an empty string because of this:

    Image 2