使用Selenium和Python爬取Twitter推文时遇报错求助
问题分析与解决步骤
1. 修复遍历元素的错误
你使用wd.find_element()(返回单个元素)却试图用for循环遍历,这会直接触发类型错误。要获取多个匹配元素,必须改用wd.find_elements()(返回元素列表)。
2. 替换动态定位的XPATH
你从浏览器复制的XPATH包含动态ID(id__armfsi35bm),这类ID是Twitter页面动态生成的,每次访问都会变化,完全无法稳定定位元素。改用基于静态属性的定位方式,比如通过推文区域的固定测试ID或类名定位:
比如要获取推文中的外部链接,可以使用这个XPATH:'//div[@data-testid="tweet"]//a[contains(@href, "/") and not(contains(@href, "status"))]'
3. 补充缺失的导入
代码中用到了By.XPATH,但未导入By类,需要在代码开头添加:
from selenium.webdriver.common.by import By
4. 添加等待机制
Twitter是动态渲染页面,直接获取元素可能因页面未加载完成而找不到,需添加显式等待确保元素加载完成:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
修正后的完整代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC !pip install kora -q from kora.selenium import wd link = 'https://twitter.com/psalmcrypt/status/1442460419612835840?s=19' wd.get(link) # 等待推文区域加载完成并获取目标链接元素 wait = WebDriverWait(wd, 10) link_elements = wait.until(EC.presence_of_all_elements_located((By.XPATH, '//div[@data-testid="tweet"]//a[contains(@href, "/") and not(contains(@href, "status"))]'))) # 提取所有链接的href属性 promoters = [a.get_attribute('href') for a in link_elements] # 打印结果 for promoter in promoters: print(promoter)
额外注意事项
- Twitter有反爬机制,频繁请求可能被限制访问,建议添加适当延时(显式等待优先于
time.sleep())。 - 若目标推文需要登录才能查看,需补充登录逻辑。
内容的提问来源于stack exchange,提问作者Prachi Lal
相关产品推荐
相关产品推荐

