AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79573132
Accepted
chintan patel
chintan patel
Asked: 2025-04-14 20:20:30 +0800 CST2025-04-14 20:20:30 +0800 CST 2025-04-14 20:20:30 +0800 CST

Estou enfrentando um problema ao clicar no elemento suspenso

  • 772

Estou tentando acessar dados de "https://www.nseindia.com/report-detail/eq_security", mas quando insiro um símbolo, por exemplo, "INFY", preciso selecionar a ação no menu suspenso. Tentei usar o Selenium para clicar na primeira opção do menu suspenso, pois os símbolos são únicos, então a primeira opção deveria ser minha ação. Mas não consigo visualizar o menu suspenso. Alguém pode sugerir como clico na primeira opção do menu suspenso e, em seguida, obtenho os dados da tabela abaixo?

Até agora construí abaixo:

import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import random

# Start undetected Chrome
driver = uc.Chrome()
driver.get("https://www.nseindia.com/report-detail/eq_security")

# Wait for the page to load
time.sleep(5)

# Step 1: Find the symbol input field
symbol_input = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="hsa-symbol"]'))
)

# Step 2: Click on it and type 'INFY' with delays
symbol_input.click()
time.sleep(1)

# Human-like typing
for char in "INFY":
    symbol_input.send_keys(char)
    time.sleep(random.uniform(0.3, 0.6))

# Step 3: Wait for the dropdown to be visible
try:
    # Wait for the dropdown to be visible
    dropdown = WebDriverWait(driver, 15).until(
        EC.visibility_of_element_located((By.XPATH, '//ul[contains(@class, "ui-autocomplete")]'))
    )

    # Print the HTML of the dropdown to verify it's visible
    dropdown_html = driver.page_source
    if 'ui-autocomplete' in dropdown_html:
        print("✅ Dropdown is visible.")
    else:
        print("❌ Dropdown not visible.")

    # Locate all the dropdown items
    dropdown_items = driver.find_elements(By.XPATH, '//ul[contains(@class, "ui-autocomplete")]/li')
    
    if dropdown_items:
        print("✅ Dropdown items found.")
        for item in dropdown_items:
            print(item.text)  # Print all options
        # Ensure the first item is in view
        driver.execute_script("arguments[0].scrollIntoView();", dropdown_items[0])

        # Click the first item using JavaScript
        driver.execute_script("arguments[0].click();", dropdown_items[0])
        print("✅ Clicked on the first dropdown item.")
    else:
        print("❌ No dropdown items found.")
except Exception as e:
    print(f"❌ Error: {str(e)}")
python
  • 2 2 respostas
  • 53 Views

2 respostas

  • Voted
  1. Adon Bilivit
    2025-04-14T20:54:16+08:002025-04-14T20:54:16+08:00

    Não há necessidade de simular a entrada de dados "de tipo humano". Você também não precisa do driver Chrome não detectado para isso. E você definitivamente não precisa nem quer as chamadas de suspensão.

    Experimente isto:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.keys import Keys
    
    URL = "https://www.nseindia.com/report-detail/eq_security"
    
    def get_name(driver, token):
        wait = WebDriverWait(driver, 5)
        ec = EC.presence_of_element_located
        sel = (By.ID, "hsa-symbol")
        field = wait.until(ec(sel))
        field.send_keys(token + Keys.ENTER)
        sel = (By.CSS_SELECTOR, "#hsa-symbol_listbox p.line1 span")
        return wait.until(ec(sel)).text
    
    with webdriver.Chrome() as driver:
        driver.get(URL)
        print(get_name(driver, "INFY"))
    

    Saída:

    Infosys Limited
    
    • 1
  2. Best Answer
    Shawn
    2025-04-14T21:32:13+08:002025-04-14T21:32:13+08:00

    Você complicou o código. Veja o código simples e funcional abaixo:

    import undetected_chromedriver as uc
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import time
    
    driver = uc.Chrome()
    driver.get("https://www.nseindia.com/report-detail/eq_security")
    driver.maximize_window()
    wait = WebDriverWait(driver, 10)
    
    char = "INFY"
    wait.until(EC.element_to_be_clickable((By.ID, "hsa-symbol"))).send_keys(char)
    
    # Below line will click the first dropdown item
    wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@id='hsa-symbol_listbox']//div//div[1]"))).click()
    time.sleep(10)
    

    Observação: a expressão XPath abaixo selecionará o primeiro item suspenso:

    //div[@id='hsa-symbol_listbox']//div//div[1]
    

    Abaixo selecionaremos o segundo item:

    //div[@id='hsa-symbol_listbox']//div//div[2]
    

    E assim por diante.

    • 1

relate perguntas

  • Como divido o loop for em 3 quadros de dados individuais?

  • Como verificar se todas as colunas flutuantes em um Pandas DataFrame são aproximadamente iguais ou próximas

  • Como funciona o "load_dataset", já que não está detectando arquivos de exemplo?

  • Por que a comparação de string pandas.eval() retorna False

  • Python tkinter/ ttkboostrap dateentry não funciona quando no estado somente leitura

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve