当前位置: 首页 > 知识库问答 >
问题:

Python Selenium单击悬停按钮

薛寒
2023-03-14

我正在尝试单击一个按钮来启动文件下载。根据我所看到的,该按钮具有悬停功能。我尝试通过所有find_element_by路径单击。

页面的HTML块,

<button class="btn-retrieve ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" id="sub_1:listPgFrm:j_idt6461:downloadBtn" name="sub_1:listPgFrm:j_idt6461:downloadBtn" onclick="new ice.ace.DataExporter('sub_1:listPgFrm:j_idt6461:downloadBtn', function() { ice.ace.ab(ice.ace.extendAjaxArgs({&quot;source&quot;:&quot;sub_1:listPgFrm:j_idt6461:downloadBtn&quot;,&quot;execute&quot;:'@all',&quot;render&quot;:'@all',&quot;event&quot;:&quot;activate&quot;,&quot;onstart&quot;:function(cfg){showProcessingMessage('Downloading'); return true;;}}, {node:this})); });return false;" style="margin-top: -4px;" role="button" aria-disabled="false"><span class="ui-button-text"><span>Download</span></span></button>

悬停前按钮的类是,

"btn-retrieve ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"

悬停时按钮的类是,

"btn-retrieve ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only ui-state-hover"

通过开发人员窗口选择按钮,并通过路径从

<span>Download</span>==$0 

我得到了如下结果,

CSS路径,

#sub_1\:listPgFrm\:j_idt6461\:downloadBtn > span > span

XPath,

//*[@id="sub_1:listPgFrm:j_idt6461:downloadBtn"]/span/span

我试过的代码,

dwnd = driver.find_element_by_xpath("//*[@id='sub_1:listPgFrm:j_idt6461:downloadBtn']/span")
dwnd.click()

而且,

button = driver.find_element_by_css_selector("#sub_1\:listPgFrm\:j_idt6461\:downloadBtn")
download = driver.find_element_by_link_text("Download")
hover = ActionChains(driver).move_to_element(button).move_to_element(download)
hover.click().build().perform()

共有1个答案

曾新立
2023-03-14

您可以使用基于文本的定位器:

//button[.='Download']

请检查开发工具(Google chrome)是否在HTML DOM中有唯一条目。

检查步骤:

在铬中按 F12 键 -

你可以点击它:

代码试用1:

time.sleep(5)
driver.find_element(By.XPATH, "//button[.='Download']").click()

代码试用2:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[.='Download']"))).click()

代码试用3:

time.sleep(5)
button = driver.find_element(By.XPATH, "//button[.='Download']")
driver.execute_script("arguments[0].click();", button)

代码试用 4:

time.sleep(5)
button = driver.find_element(By.XPATH, "//button[.='Download']")
ActionChains(driver).move_to_element(button).click().perform()

进口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
 类似资料:
  • 我正在尝试单击“编辑”按钮上的悬停。然而,当我使用MouseOverElement时,我总是得到“Element当前不可见,因此可能不会与之交互”的错误。 对如何使其工作有什么想法吗?感谢   标题                       编辑       内容         下面是我的代码: 方法1: WebElement textArea=driver.findElement(by.cs

  • 如果孩子在焦点中(已被点击),我怎么能失去父母的悬停状态?我有一个菜单箭头(用OPEN代替了它,以减少代码),它在悬停状态下打开我的菜单和菜单项,当我单击它们时,菜单项就会聚焦。在菜单项点击后,我希望能够失去对我父母的关注,这样菜单就会消失。 如果可能的话,我会尽量避免使用javascript,这是我最好的尝试... 这是我的html null null 编辑 我在一个单页应用程序上使用Angul

  • 我使用Selenium使用Java语言自动化UI。 我有一个动作按钮,当用户将鼠标悬停在动作按钮上时,它会给出两个可点击的选项——创建和编辑 我已经将CSS定位符存储为动作按钮的枚举,以及创建和编辑(可点击的)链接的枚举,分别为Action button、CREATEACTION、EDITACTION。 我使用了如下Java代码,但它给出了一个错误java.lang.ClassCastExcept

  • 我是一个用cucumber和水豚配食的新手。我需要在使用capybara将鼠标悬停在网页的某些元素上后单击显示的链接 例如att.com 1、场景悬停在个人点击att.com上 悬停在商店上方的另一个场景——捆绑包——点击热门捆绑包 如何使用水豚的悬停和点击方法实现这一点,或者是否有其他方法可以实现这一点。 尝试的选项是 但它抱怨找不到xpath

  • 按钮的“class”在悬停时发生变化,所以我使用ActionChains移动到元素并单击它(我还使用sleep为浏览器加载页面提供了足够的时间)。Python没有抛出任何异常,但单击不起作用(即日历没有向后移动)。 下面我提供了提到的网站和我用一个例子写的代码。你知道为什么会发生这种情况和/或我该如何克服这个问题吗?非常非常感谢。 网址=https://burocomercial.profeco.

  • 我试图在html和CSS中实现一种效果。我有一个按钮,上面写着“登录”。所以我想做的是当我悬停的时候: “登录”按钮将转换为两个按钮,分别表示: “客户登录”和“管理员登录”。