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]")
似乎被临时或永久覆盖阻止了。
在这种情况下,您可以等待 ExplicitWait
和 ExplicitConditions
直到所述阻塞元素消失 - 尽管据我所知这在这种特定情况下不起作用,如果没有弹出窗口仍然存在已经完成了。另一种方法是使用 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)
注意两点:
driver
显然必须是 WebDriver 的一个实例。
我建议一般不要使用绝对 XPath。使用相对的 XPath 不太容易被站点结构中的小变化破坏。单击 here 获取小指南以通读。
我正在创建一个 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]")
似乎被临时或永久覆盖阻止了。
在这种情况下,您可以等待 ExplicitWait
和 ExplicitConditions
直到所述阻塞元素消失 - 尽管据我所知这在这种特定情况下不起作用,如果没有弹出窗口仍然存在已经完成了。另一种方法是使用 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)
注意两点:
driver
显然必须是 WebDriver 的一个实例。我建议一般不要使用绝对 XPath。使用相对的 XPath 不太容易被站点结构中的小变化破坏。单击 here 获取小指南以通读。