首页 > 解决方案 > 如何通过 Python 使用 Selenium 单击动态“喜欢”按钮?

问题描述

嗨~在这个音乐网站上: 音乐网站链接 我想点击歌曲栏右侧的点赞按钮,我使用以下代码:

like_number=3
like_pos=f'#app > div > div.content-wrapper > div.song-list-view.list-view.view-without-leftbar > div.song-list > div > div.table.idle.song-table.song-list-table > div > table > tbody > tr:nth-child({str(like_number)}) > td:nth-child(5) > div > div > div:nth-child(1) > div'
button = self.browser.find_element_by_css_selector(like_pos)
self.browser.implicitly_wait(10)
ActionChains(self.browser).move_to_element(button).click(button).perform()

但是,没有响应,控制台显示我的标签不是交互式的:

element not interactable” exception

我很困惑,因为我搜索整个堆栈溢出,但对我来说没有实际的解决方案

我只是想实现一个简单的点击喜欢按钮的功能谢谢你对我有什么好主意!

困难的是你必须暂停你的鼠标一段时间然后点击按钮显示,这样你就可以点击它,这是非常有线的情况。

下面是图片示例

图片:当您移动鼠标并暂停一段时间时,歌曲栏会激活

图片:点赞按钮时的状态

标签: seleniumselenium-webdriverxpathwebdriverwebdriverwait

解决方案


要在歌曲栏右侧click()的按钮上,您必须诱导WebDriverWait,您可以使用以下定位器策略Likeelement_to_be_clickable()

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("start-maximized")
    driver = webdriver.Chrome(options=chrome_options)
    driver.get("https://www.xiami.com/favorite/88955424")
    ActionChains(driver).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table/tbody/tr//div[@class='duration-container ops-container']")))).perform()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//table/tbody/tr//div[@class='duration-container ops-container']//div[@class='operations ops-right']/div[@class='ops-item']/div[@class='iconfont']"))).click()
    
  • 浏览器快照:

喜欢


参考

您可以在以下位置找到一些相关的讨论:


推荐阅读