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

Python/Selenium“悬停并单击”不适用于类在悬停时更改的WebElement

蒋鹏鹍
2023-03-14

按钮的“class”在悬停时发生变化,所以我使用ActionChains移动到元素并单击它(我还使用sleep为浏览器加载页面提供了足够的时间)。Python没有抛出任何异常,但单击不起作用(即日历没有向后移动)。

下面我提供了提到的网站和我用一个例子写的代码。你知道为什么会发生这种情况和/或我该如何克服这个问题吗?非常非常感谢。

网址=https://burocomercial.profeco.gob.mx/index.jsp

代码:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Chrome(path_to_webdriver)
driver.get('https://burocomercial.profeco.gob.mx/index.jsp') #access website

# Search bar and search button
search_bar = driver.find_elements_by_xpath('//*[@id="txtbuscar"]')
search_button = driver.find_element_by_xpath('//*[@id="contenido"]/div[2]/div[2]/div[2]/div/div[2]/div/button')

# Perform search
search_bar[0].send_keys("inmobiliaria")
search_button.click()

# Select result
time.sleep(2)
xpath='//*[@id="resultados"]/div[4]/table/tbody/tr[1]/td[5]/button'
driver.find_elements_by_xpath(xpath)[0].click()

# Open calendar    
time.sleep(5)
driver.find_element_by_xpath('//*[@id="calI"]').click() #opens calendar
time.sleep(2)

# Hover-and-click on "<" (Here's the problem!!!)
cal_button=driver.find_element_by_xpath('//div[@id="ui-datepicker-div"]/div/a') 
time.sleep(4)
ActionChains(driver).move_to_element(cal_button).perform() #hover
prev_button = driver.find_element_by_class_name('ui-datepicker-prev') #catch element whose class was changed by the hover
ActionChains(driver).click(prev_button).perform() #click
time.sleep(1)
print('clicked on it a second ago. No exception was raised, but the click was not performed')
time.sleep(1) 

共有1个答案

卢知
2023-03-14

您不需要悬停<,只需单击它。

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(path_to_webdriver)
driver.get('https://burocomercial.profeco.gob.mx/index.jsp') #access website

# set up wait
wait = WebDriverWait(driver, 10)

# Perform search
driver.find_element_by_id('txtbuscar').send_keys("inmobiliaria")
driver.find_element_by_css_selector('button[alt="buscar"]').click()

# Select result
xpath='//*[@id="resultados"]/div[4]/table/tbody/tr[1]/td[5]/button'
wait.until(EC.element_to_be_clickable((By.XPATH, xpath))).click()

# Open calendar    
wait.until(EC.element_to_be_clickable((By.ID, 'calI'))).click() #opens calendar
wait.until(EC.element_to_be_visible((By.ID, 'ui-datepicker-div'))

# Click on "<"
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'a[title="Ant"]'))).click()

几件事

>

  • 如果XPath仅由ID组成,只需使用.find_element_by_id()。更快更易读。

  •  类似资料:
    • 我正在尝试单击一个按钮来启动文件下载。根据我所看到的,该按钮具有悬停功能。我尝试通过所有单击。 页面的HTML块, 悬停前按钮的类是, 悬停时按钮的类是, 通过开发人员窗口选择按钮,并通过路径从 我得到了如下结果, CSS路径, XPath, 我试过的代码, 而且,

    • 问题内容: 我需要一个包含图像的菜单,当有人将鼠标悬停在菜单上时,图像应该会更改。 HTML CSS 我面临的问题是,当我将 鼠标悬停 在菜单项周围时,要显示在悬停上的图像显示 在 旧图像 的背面 。此外,显示的悬停背景图像的宽度和高度 很小 。请帮忙。谢谢![在此处输入图片描述] [1] 问题答案: 将此代码放在结束body标签之前, 将课程首页放置在标签中。做完了 完美运作。

    • 问题内容: 我使用CSS更改了表格的悬停颜色 在Chrome和Firefox中可以正常工作,但在Internet Explorer 8中不会发生悬停效果。 有没有办法使这种效果也可以与IE8一起使用? 问题答案: 这 应该 很好地工作在IE8。 黑暗中的刺伤: 确保您有一个doctype作为触发标准模式的HTML的第一行,例如: 在Quirks模式下,IE仿真5.5版,除之外的其他元素均不支持。

    • 问题内容: 如何更改此确切代码以对鼠标悬停产生悬停效果? 我尝试遵循其他一些问题和答案,但我无法真正遵循它们。 因此,HTML是: 现在,我要做的是当鼠标悬停在小图像上时更改大尺寸图像。 问题答案: 请尝试以下代码。工作正常 我修改了代码,希望它能稍作延迟。.但是,它不是动画。

    • 所以我从昨天开始就一直在使用Javascript(Vue)和html(所以请原谅我的困惑),我不知道如何在更改链接的同时更改“home”链接描述旁边的图像的颜色。 我试过使用CSS类,它工作,但只改变图像颜色时,你实际上悬停在图像上,而不是整个链接线。除了CSS之外,我也尝试过通过“onmouseover”将图像改变为彩色版本,但不知怎么的,这将图标立即改变为彩色版本(?)。我猜问题是我通过一个:

    • 问题内容: 我一直在玩这个游戏,而且我认为这很简单。我正在尝试将鼠标悬停在“ NEW”标签上。处于悬停状态后,仅使用CSS将内容从“ NEW”更改为“ ADD”。 这是一个JSFiddle,向您展示我正在使用什么。 问题答案: 为此,引入了CSS 内容属性以及和伪元素。