首页 > 解决方案 > 如何从加载的页面中选择所有推文?

问题描述

我尝试按照本教程https://www.youtube.com/watch?v=7ovFudqFB0Q 进行操作,但我收到一个错误,即找不到元素。我怀疑 tweets = bot.find_element_by_class_name("tweet") 不再起作用,因为 twitter 更改了代码中的一些命名。让我知道什么是一个好的选择?

我尝试使用 CSS 选择器选择元素。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

class TwitterBot:
    def __init__ (self, username, password):
        self.username = username
        self.password = password
        self.bot =  webdriver.Firefox()


    def login(self):
        bot = self.bot
        bot.get("https://twitter.com/login")
        time.sleep(3)
        email = bot.find_element_by_class_name("js-username-field")
        password =  bot.find_element_by_class_name("js-password-field")
        email.clear()
        password.clear()
        email.send_keys(self.username)
        password.send_keys(self.password)
        password.send_keys(Keys.RETURN)
        time.sleep(3)

    def like_tweet(self, hashtag):
        bot = self.bot
        bot.get('https://twitter.com/search?q=' + hashtag +'&src=typd')
        time.sleep(3)
        for i in range(1,3):
            bot.execute_script('window.scrollTo(0,document.body.scrollHeight)')
            time.sleep(2)
            tweets = bot.find_element_by_class_name("tweet")
            #tweets = bot.find_element_by_xpath('[data-testid="tweet"]')
            #print(tweets)
            links = [elem.get_attribute('data-permalink-path')
            for elem in tweets]
            #print(links)


ed = TwitterBot('xxxxxxx','xxxxx')
ed.login()
ed.like_tweet('xxxxx')
\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium-3.141.0-py3.8.egg\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: .tweet

该示例应返回页面上所有推文的列表。

标签: pythonseleniumtwitter

解决方案


推荐阅读