使用Selenium爬取Twitter推文时出现str对象无get_attribute属性报错如何解决
错误原因分析
- 第一处语法错误:你在调用元素查找方法时错误使用了赋值操作符
=,导致tweets变量实际被赋值为字符串'css-1dbjc4n',而非Selenium返回的WebElement对象集合,遍历字符串时每个elem都是字符类型,自然没有get_attribute方法 - 第二处API使用错误:
find_element_by_class_name(单数)仅返回匹配到的第一个WebElement对象,要获取所有匹配的元素需要使用复数形式find_elements_by_class_name - 补充提示:Twitter的
css-1dbjc4n是动态生成的通用类名,大量非推文元素也会使用该类名,后续调试时建议使用更精准的定位规则,比如结合属性选择器定位带有data-permalink-path的元素
修复后代码
for i in range(1,3): bot.execute_script('window.scrollTo(0, document.body.scrollHeight)') # 滚动页面 time.sleep(5) # 等待内容加载 # 修正方法调用,改为使用复数查找方法 tweets = bot.find_elements_by_class_name('css-1dbjc4n') # 增加非空判断过滤没有对应属性的元素,避免报错 links = [elem.get_attribute('data-permalink-path') for elem in tweets if elem.get_attribute('data-permalink-path')] print(links) ed = Twitterbot('xxxxx', 'xxxxx') ed.login() ed.like_tweet('webdevelopment')
内容的提问来源于stack exchange,提问作者Yash Mishra
相关产品推荐
相关产品推荐

