【问题标题】:Selenium click like on twitterSelenium 在推特上点赞
【发布时间】:2020-04-27 16:31:48
【问题描述】:

使用 selenium 在推文上点击“喜欢”的最新方法是什么?

从 css 看来,我需要点击这个:

<div aria-haspopup="false" aria-label="131310 Likes. Like" role="button" data-focusable="true" tabindex="0" class="css-18t94o4 css-1dbjc4n r-1777fci r-11cpok1 r-1ny4l3l r-bztko3 r-lrvibr" data-testid="like">

可以在个人资料页面上找到。我的目标不是完全像个人资料页面上的推文,但如果我能弄清楚这一点,我就能弄清楚我真正想要做什么。

我尝试了很多方法,但这是我最近的方法:

like_btn = (By.XPATH, ("//div[@data-testid='like', @class='css-18t94o4 css-1dbjc4n r-1777fci r-11cpok1 r-1ny4l3l r-bztko3 r-lrvibr']"))

like_btn = (By.XPATH, ("//div[@data-testid='like'"))

Xpath 的副本:

like_btn = (By.XPATH, ("//*[@id='react-root']/div/div/div/main/div/div/div/div[1]/div/div[2]/div/div/div[2]/section/div/div/div/div[3]/div/article/div/div[2]/div[2]/div[4]/div[3]/div"))

完整xpath的副本:

like_btn = (By.XPATH, ("/html/body/div/div/div/div/main/div/div/div/div[1]/div/div[2]/div/div/div[2]/section/div/div/div/div[3]/div/article/div/div[2]/div[2]/div[4]/div[3]/div"))

然后该方法使用:

def like_user_tweets(self, user_tweets=UserStatuses.like_btn):
    self.like_btn.click()

看起来 twitter 最近对所有内容都进行了改造,因为即使是一年或更早之前的 github 代码也使用“HeartAnimation”类来查找点赞按钮,但它似乎不再存在了。

错误:AttributeError: 'NoneType' object has no attribute 'click'

它是一个按钮,所以应该不能点击?

如何点击喜欢/收藏按钮?

【问题讨论】:

  • 它是一个按钮,所以它不应该能够点击吗? 不过看看错误,这不是问题。据我所知,您需要做的就是为元素找到合适的 xpath。这与为任何元素查找 xpath 的过程完全相同,Twitter 似乎没有任何方面与大多数情况完全不同。
  • 那么我的 Xpath 或完整 Xpath 的副本不应该工作吗?你能看出我的语法有什么问题吗?
  • 澄清我的 xpath .. 那是直接来自 chrome 检查的实际 copypasta
  • 您是否检查过您要点击的元素是否在 iframe 中?如果是这样,您必须切换到该 iframe 才能找到该按钮。
  • @MinhDao 在检查中搜索“iframe”,但没有任何弹出

标签: python selenium selenium-chromedriver


【解决方案1】:

错误信息:

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: 
Element <div aria-label="394 Likes. Like" role="button" tabindex="0" 
data-testid="like">...</div> is not clickable at point (539, 10). 

Other element would receive the click: <div class="css-1dbjc4n r-1habvwh">...</div>

解决方案:

browser = webdriver.Chrome()
infoq_url = 'https://twitter.com/infoqchina'
browser.get(infoq_url)
sleep(2)

like_buttons = browser.find_elements(By.XPATH, '//div[@data-testid="like"]') 
like_btn = like_buttons[0]
like_svg = like_btn.find_element(By.TAG_NAME, "svg")
like_svg.click()

参考:

btn_parent = btn.find_element(By.XPATH, "..")  # find parent element.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多