【问题标题】:How to click on a drop-down menu item using selenium with python?如何使用 selenium 和 python 单击下拉菜单项?
【发布时间】:2020-02-19 02:50:10
【问题描述】:

我尝试使用 xpath 搜索,但它对我不起作用。这个想法是我将鼠标移到“Nota Fiscal”上,然后在下拉菜单中用鼠标向下并单击“Emissão”。下拉菜单位于名为“pag_principal”的框架内,其余代码(不在此处)在该框架内工作,也就是说,selenium 已正确切换窗口和框架...... Inspect elements 我的问题是:selenium.common.exceptions.ElementNotInteractableException: Message: Element could not be scrolled into view.

我该如何解决这个问题?

我尝试的代码是这样的:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys

bot.get('https://www.nfs-e.net/fiscalweb.php')
time.sleep(3)

campo_login = bot.find_element_by_xpath("//input[@name='login_temp']") 
campo_login.clear()
campo_login.send_keys(self.usuario)
password = bot.find_element_by_xpath('//*[@id="passw_temp"]')
password.clear()
password.send_keys(self.senha)   
password.send_keys(Keys.RETURN)
time.sleep(6)
# handling to new window
bot.switch_to.window(bot.window_handles[1])
bot.maximize_window()

def envio(self):
   bot = self.bot
   time.sleep(5)
   bot.switch_to.frame("pag_principal")
   time.sleep(2)

# this is the part that I want selenium to select the item "Emissão" in the drop-down menu "Nota Fiscal"

   Nota_fiscal = WebDriverWait(bot, 100000).until(EC.element_to_be_clickable((By.XPATH, "/html/body/table/tbody/tr[1]/td/div/div/ul[1]/li[5]/div/ul/li[1]/a/span"))).click()
   time.sleep(2)
   Emissão = bot.find_element_by_xpath('/html/body/table/tbody/tr[1]/td/div/div/ul[1]/li[5]/div/ul/li[1]/a/span').click()

[尝试使用 select]

Menu = bot.find_element_by_class_name("menu") 
mySelectElement = bot.find_element_by_xpath('/html/body/table/tbody/tr[1]/td/div/div/ul[1]/li[5]/a/span') 
dropDownMenu = Select(mySelectElement) 
WebDriverWait(bot, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/body/table/tbody/tr[1]/td/div/div/ul[1]/li[5]/div/ul/li[1]/a/span")))
dropDownMenu.select_by_visible_text('Emissão') 
time.sleep(2) 
Emissão = bot.find_element_by_xpath('/html/body/table/tbody/tr[1]/td/div/div/ul[1]/li[5]/div/ul/li[1]/a/span').click() 

[我想点击“Nota Fiscal”下拉菜单中的“Emissão”(我不知道如何编辑 html)]


    <div class="titulo_sistema">Nota Fiscal Eletrônica</div>  <ul class="menu"><li><a href="javascript:void(0)"><span> Globais </span></a><div><ul><li><a href="javascript:void(0)"><span class="span_sub_menu">Cadastros</span></a><div><ul><li><a href="javascript:void(0)"><span class="span_sub_menu">Diversos</span></a><div><ul><li><a onclick="carrega_rotina_menu(1026,118,event)" href="javascript:void(0)"><span class="span_menu" title="Alterar Senha/E-Mail">Alterar Senha/E-Mail</span></a></li><li><a onclick="carrega_rotina_menu(3565,101,event)" href="javascript:void(0)"><span class="span_menu" title="CPFCNPJ x Email">CPFCNPJ x Email</span></a></li><li><a onclick="carrega_rotina_menu(3561,101,event)" href="javascript:void(0)"><span class="span_menu" title="Procuração Digital">Procuração Digital</span></a></li></ul></div></li><li><a href="javascript:void(0)"><span class="span_sub_menu">Pessoas/Endereços</span></a><div><ul><li><a onclick="carrega_rotina_menu(3503,101,event)" href="javascript:void(0)"><span class="span_menu" title="Bairro">Bairro</span></a></li><li><a onclick="carrega_rotina_menu(3504,101,event)" href="javascript:void(0)"><span class="span_menu" title="Logradouro">Logradouro</span></a></li><li><a onclick="carrega_rotina_menu(1014,101,event)" href="javascript:void(0)"><span class="span_menu" title="Pessoa">Pessoa</span></a></li><li><a onclick="carrega_rotina_menu(3572,101,event)" href="javascript:void(0)"><span class="span_menu" title="Estrangeiros">Estrangeiros</span></a></li></ul></div></li></ul></div></li><li><a href="javascript:void(0)"><span class="span_sub_menu">Consultas</span></a><div><ul><li><a href="javascript:void(0)"><span class="span_sub_menu">Economico</span></a><div><ul><li><a onclick="carrega_rotina_menu(3517,101,event)" href="javascript:void(0)"><span class="span_menu" title="Atividades">Atividades</span></a></li><li><a onclick="carrega_rotina_menu(3526,101,event)" href="javascript:void(0)"><span class="span_menu" title="Cadastro Econômico">Cadastro Econômico</span></a></li></ul></div></li><li><a href="javascript:void(0)"><span class="span_sub_menu">Pessoas/Endereços</span></a><div><ul><li><a onclick="carrega_rotina_menu(3525,101,event)" href="javascript:void(0)"><span class="span_menu" title="Cidade">Cidade</span></a></li><li><a onclick="carrega_rotina_menu(3506,101,event)" href="javascript:void(0)"><span class="span_menu" title="Pessoa">Pessoa</span></a></li><li><a onclick="carrega_rotina_menu(3573,101,event)" href="javascript:void(0)"><span class="span_menu" title="Estrangeiros">Estrangeiros</span></a></li></ul></div></li></ul></div></li></ul></div></li><li><a href="javascript:void(0)"><span>Autorização</span></a><div><ul><li><a onclick="carrega_rotina_menu(9710,101,event)" href="javascript:void(0)"><span class="span_menu" title="Solicitação de Cancelamento de NFSe">Solicitação de Cancelamento de NFSe</span></a></li><li><a onclick="carrega_rotina_menu(4505,101,event)" href="javascript:void(0)"><span class="span_menu" title="Utilização de NFSe">Utilização de NFSe</span></a></li></ul></div></li><li><a href="javascript:void(0)"><span>Configurações</span></a><div><ul><li><a onclick="carrega_rotina_menu(4514,101,event)" href="javascript:void(0)"><span class="span_menu" title="Cabeçalho da NFSe">Cabeçalho da NFSe</span></a></li></ul></div></li><li><a href="javascript:void(0)"><span>Consulta</span></a><div><ul><li><a onclick="carrega_rotina_menu(4524,101,event)" href="javascript:void(0)"><span class="span_menu" title="NFS-e Prestadas">NFS-e Prestadas</span></a></li><li><a onclick="carrega_rotina_menu(4506,101,event)" href="javascript:void(0)"><span class="span_menu" title="NFS-e Tomadas">NFS-e Tomadas</span></a></li></ul></div></li><li><a href="javascript:void(0)"><span>Nota Fiscal</span></a><div><ul><li><a onclick="carrega_rotina_menu(9598,656,event)" href="javascript:void(0)">**<span class="span_menu" title="Emissão">Emissão</span>**</a></li><li><a onclick="carrega_rotina_menu(9597,109,event)" href="javascript:void(0)"><span class="span_menu" title="Cancelamento">Cancelamento</span></a></li><li><a onclick="carrega_rotina_menu(4501,101,event)" href="javascript:void(0)"><span class="span_menu" title="Gerenciamento de Notas">Gerenciamento de Notas</span></a></li><li><a onclick="carrega_rotina_menu(4511,436,event)" href="javascript:void(0)"><span class="span_menu" title="Exportação">Exportação</span></a></li></ul></div></li>     <li>        <a href="javascript:void(0)" onclick="parent.window.close(0,event)"><span> Sair </span></a>     </li>  </ul>  <ul style="float:right;">     <li style="width:25px;max-height:25px;padding:3px;text-align:center;cursor: pointer;color:#104E8B;" title="Início" id="home-button">         <i class="fa fa-home" style="font-size:18px;padding-top:3px;cursor: pointer;" onclick="abre_tela_inicial();"></i>     </li>     <li style="width:25px;max-height:25px;text-align:center;padding:3px;" title="Usuário" id="perfil-usuario">         <i class="fa fa-user" style="font-size:18px;padding-top:3px;cursor: pointer;" onclick="abrePerfilUsuario()"></i>     </li>     <li style="float:right;height:35px;margin-right: 35px; padding-left:5px;background:none;position:block;" id="lipesquisa" name="lipesquisa">         <input type="text" id="container_pesquisa" name="container_pesquisa" class="container_busca campo_externo_suggest" placeholder="Pesquisa" onfocus="focusPesquisa(this, 'in')" onblur="focusPesquisa(this, 'out')" suggest="true" autocomplete="off"><script>  $(document).ready(function(){$("#container_pesquisa").autocompletepesquisa({"aCamposVisualizacao":["frm_tit"],"iRotina":"16","sCampoProcurado":"frm_tit","sCampos":"container_pesquisa:frm_tit","sSessao":"3cbtrg9e3c1eil54cupilua6s1","sUrlAbrir":"","sNome":"form","iRotChamou":"0","iAcaChamou":"20","bAutoComplete":true,"aAjaxCampos":["container_pesquisa"],"bAjaxComplete":true});}); if ($.browser.msie) {      if($.browser.version == 9.0 || $.browser.version == 8.0) {          $('#container_pesquisa').css('padding-top','3px');          $('#container_pesquisa').css('background-position','5px -1px');      }  }</script>     </li>  </ul>

首先我需要将鼠标悬停在这些元素上以显示下拉菜单

<span>Nota Fiscal</span>

而我要点击的元素就是这个

<span class="span_menu" title="Emissão">Emissão</span>

【问题讨论】:

  • 你好,@KentKostelac,我尝试像这样使用 select 但我不能将它与 span 元素一起使用 消息:Select 仅适用于
  • 我已经编辑了你的问题。将来只需编辑您的问题。然后添加评论以引起注意。如你看到的;注释中写的代码不可读
  • 更重要的是。您应该尝试使用属性来查找您需要使用的元素。从浏览器复制粘贴 xpath 并不适用于所有情况。也在你的 xpath 中。您选择的是 而不是
  • 向我们提供您尝试从中选择的 HTML 的最小可验证示例,以便我们确定您的 xpath 有什么问题。因为现在我只能告诉你你的 xpath 是错误的。而且一张图不算数。

标签: python-3.x selenium drop-down-menu automation


【解决方案1】:

您的 xpath 完全错误。当然,当您按下跨度时,什么都不会发生。尝试单击它的父级

并尝试使用正确的 xpath,而不仅仅是从浏览器复制粘贴的内容。

//span[@class='span_menu' and @title='Emissão']::parent/a

我重复一遍。如果您提供一个最小的 HTML 示例。帮助您会容易得多。

【讨论】:

    猜你喜欢
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2023-04-09
    • 2017-09-18
    相关资源
    最近更新 更多