应用场景:小米商城首页,鼠标悬停在“小米手机”后,获取悬浮框页面上的元素
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.mi.com/index.html')
sleep(2)
# 定位鼠标悬停元素
# el = driver.find_element_by_xpath('//*[@data-log_code="31pchomeother001000#t=normal&act=other&page=home&page_id=10530&bid=3476901.1"]')
el = driver.find_element_by_css_selector('[data-index="0"]')
ActionChains(driver).move_to_element(el).perform() # 鼠标悬停
sleep(1)
driver.find_element_by_xpath('//*[@id="J_navMenu"]//ul[@class="children-list clearfix"]') # 定位弹框上的元素
sleep(5)
driver.quit()
另外一种方法,参考学习:
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
# driver.maximize_window()
driver.get('https://www.mi.com/index.html')
# 模拟鼠标悬停操作
menu = driver.find_element_by_css_selector("#J_navCategory+li") # 定位鼠标要悬停的元素
mouse = ActionChains(driver)
mouse.move_to_element(menu).perform() # 鼠标悬停到定位元素上
sleep(5) # 页面跳转时间
# 获取弹框页面上产品名称
items = driver.find_elements_by_css_selector("#J_navMenu .title") # 同时定位多个元素,所以必须用find_elements
titles = []
for item in items:
titles.append(item.text)
# print(titles)
assert titles == ['小米MIX FOLD', '小米11 Ultra', '小米11 Pro', '小米11 青春版', '小米10S', '小米11']
driver.quit()