为啥鼠标悬停数据消失

Posted

技术标签:

【中文标题】为啥鼠标悬停数据消失【英文标题】:Why mouse hover data disappear为什么鼠标悬停数据消失 【发布时间】:2019-09-28 01:17:54 【问题描述】:

当我将鼠标悬停在元素上时,它会在 html 代码中显示表格 但是当我滚动时,广告再次尝试悬停,它不起作用? 任何帮助

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

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(0)
url = 'https://public.tableau.com/views/IRENA_Decentralised_RE_Data_Review_2019/ExploreData?:showVizHome=no'
driver.get(url)
time.sleep(3)

for i in range(10000):
    element = driver.find_element_by_xpath("//div[@class='tab-tvScrollY tvimages'][./div[@class='tvimagesContainer' and @style]]")
    driver.execute_script('arguments[0].scrollTop = (0,)'.format(str(i*49)),element)
    actions = ActionChains(driver)
    actions.move_by_offset(1330,200).perform()
    time.sleep(3)

【问题讨论】:

你要提取什么数据? 鼠标悬停时出现在 HTML 代码中的数据,出现国家、工厂/项目名称等表格。 @Kafels 但我还有另一个问题,这无法从 People 和 Household 列中获取数据,您能帮我解决这个问题吗? “人和家庭”数据覆盖在画布中,我搜索过从中提取数据,但没有成功。其他方式是以 PDF 格式导出表格并尝试使用一些库,如 tabula-pyPyPDF2、[...] 将 PDF 转换为 Dataframe 我使用 tabula-py 做了一些测试,但并不完全成功 @Kafels 好的,我明白了,我会努力想办法,但我觉得做不到。感谢您的宝贵时间 【参考方案1】:

花了三个小时终于搞定了!

hover 的某些 Tableau 行为无法正常工作,无法说明原因。

下面是我的代码,解释了我如何将所有行悬停。

import time

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

driver = webdriver.Chrome(executable_path='./chromedriver')
driver.maximize_window()
driver.implicitly_wait(0)
url = 'https://public.tableau.com/views/IRENA_Decentralised_RE_Data_Review_2019/ExploreData?:showVizHome=no'
driver.get(url)
time.sleep(2)

scroll = driver.find_element_by_xpath("//div[@class='tab-tvScrollY tvimages']"
                                      "[./div[@class='tvimagesContainer' and @style]]")
column = driver.find_elements_by_xpath("//canvas[@class='tabCanvas tab-widget']")[1]

action = ActionChains(driver)
for i in range(10000):
    driver.execute_script('arguments[0].scrollTop = (0,%s)' % str(i * 49), scroll)

    # Move cursor to hover element
    action.move_to_element_with_offset(column, 0, 0).perform()

    # Select HTML table
    table = driver.find_element_by_xpath("//div[@class='tab-tooltip tab-widget "
                                         "tab-tooltipBL tab-allowMouseEventPassthrough']")
    # Your selenium code to extract HTML content [...]

    # Move cursor to reset tableau hover function behavior
    action.move_to_element(scroll).perform()

希望对你有帮助!

【讨论】:

是的,它解决了我的问题。关键是输入 action.move_to_element_with_offset

以上是关于为啥鼠标悬停数据消失的主要内容,如果未能解决你的问题,请参考以下文章

FLASH中鼠标悬停在某按钮上显示某个图层内容,移开后该图层消失.

html如何实现鼠标悬停显示文字,鼠标移走文字消失。

按钮的背景在鼠标悬停时闪烁或消失

ASP 动态菜单 子菜单 鼠标悬停在子菜单上时消失。

当鼠标悬停在没有css的标题上时,如何使缩略图消失?

html如何实现鼠标悬停显示文字,鼠标移走文字消失。