如何通过Python使用Selenium单击动态的“赞”按钮?

时间:2019-08-14 12:48:54

标签: selenium selenium-webdriver xpath webdriver webdriverwait

嗨〜在此音乐网站上: Music website link 我想单击歌曲栏右侧的“赞”按钮 我使用以下代码:

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

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

我只想实现单击“喜欢”按钮的简单功能 谢谢,如果您对我有什么好主意!

困难的是,您必须将鼠标暂停一会儿,然后单击显示的按钮,这样您才能单击它,这就是这种情况。

下面是图片示例

image: Song bar activate when you move your mouse and pause for a while

image: The state when you click on the like love button

1 个答案:

答案 0 :(得分:0)

要点击歌曲栏右侧click()按钮上的Like,您必须为element_to_be_clickable()引入 WebDriverWait ,您可以使用以下命令Locator Strategies

  • 代码块:

    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()
    
  • 浏览器快照:

like


参考

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