Python Selenium Webdriver - 处理 Instagram 上的鼠标悬停

Python Selenium Webdriver - Handling mouseover on Instagram

我正在创建一个 Instagram 取消关注工具。该代码通常有效,但偶尔 Instagram 会显示某些用户的信息(就像我将鼠标悬停在该用户上一样)并导致我的代码停止 运行 因为它遮住了我需要单击以取消关注的按钮用户。

举个例子更容易理解:

如何编辑我的代码以使鼠标悬停信息消失(有没有办法关闭这些鼠标悬停效果)?

我的代码:

for i in range(num_following):
    following = self.browser.find_element_by_xpath("/html/body/div[5]/div/div/div[2]/ul/div/li[{}]/div/div[1]/div[2]/div[1]/span/a".format(i))
    following_username = following.get_attribute("title")   
    
    if following_username not in followers:
        # Unfollow account
        following_user_button = self.browser.find_element_by_xpath("/html/body/div[5]/div/div/div[2]/ul/div/li[{}]/div/div[2]/button".format(i))
        following_user_button.click()

        unfollow_user_button = self.browser.find_element_by_xpath("/html/body/div[6]/div/div/div/div[3]/button[1]")
        unfollow_user_button.click()

        print("You've unfollowed {}.".format(following_username))

我得到的错误:

selenium.common.exceptions.ElementClickInterceptedException:消息:元素在点 (781,461) 不可单击,因为另一个元素遮住了它

您要执行 .click() 的元素 unfollow_user_button = self.browser.find_element_by_xpath("/html/body/div[6]/div/div/div/div[3]/button[1]") 似乎被临时或永久覆盖阻止了。

在这种情况下,您可以等待 ExplicitWaitExplicitConditions 直到所述阻塞元素消失 - 尽管据我所知这在这种特定情况下不起作用,如果没有弹出窗口仍然存在已经完成了。另一种方法是使用 JavascriptExecutor:

将点击 直接 发送到元素
#Find the element - by_xpath or alike
unfollow_user_button = driver.find_element_by_xpath("XPATH")

#Sending the click via JavascriptExecutor
driver.execute_script("arguments[0].click();", unfollow_user_button)

注意两点:

  1. driver 显然必须是 WebDriver 的一个实例。

  2. 我建议一般不要使用绝对 XPath。使用相对的 XPath 不太容易被站点结构中的小变化破坏。单击 here 获取小指南以通读。