【问题标题】:Can't able to fetch span class text无法获取跨度类文本
【发布时间】:2021-07-14 05:47:54
【问题描述】:

请找到所附图片。我想获取图像中突出显示的部分, 我想获取此属性 1 · Trending ,#tuesdaymotivations,7,750 Tweets

请指教。 获取 URL=https://twitter.com/explore/tabs/trending

from selenium import webdriver

url = 'https://twitter.com/explore/tabs/trending'

# scrolling and scraping tweets

driver = webdriver.Chrome('/chromedriver')
driver.get(url)

trends = driver.find_element_by_xpath('//div[@data-testid="trends"]')
trend = trends[0]
trend.find_element_by_xpath('.//span').text

输出:

Traceback (most recent call last):
  File "/home/PycharmProject/Twitter_trending/ss.py", line 13, in <module>
    trends = driver.find_element_by_xpath('//div[@data-testid="trends"]')
  File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@data-testid="trends"]"}
  (Session info: chrome=90.0.4430.72)

预期输出:

1
·
Trending
#tuesdaymotivations
7,750 Tweets

2
·
Politics · Trending
#ModiResignOrRepeal
37.6K Tweets
3
·
Trending
#ThankfulTuesday
12.8K Tweets...etc

【问题讨论】:

  • 不是driver.find_elements 而不是driver.find_element
  • 我已经尝试过 driver.find_elements 和 driver.find_element 但没有运气!
  • trends = driver.find_elements_by_xpath('//div[@data-testid="trend"]') 小错字趋势-> 趋势
  • 仍然得到 [ ] 空列表!

标签: python-3.x selenium selenium-webdriver web-scraping twitterapi-python


【解决方案1】:

尝试使用 JavaScript 获取文本。使用此代码。

span = trend.find_element_by_xpath('.//span')
text = driver.execute_script("return arguments[0].innerText", span)

此方法还可以提供来自嵌套元素的文本。仍然无法正常工作,然后尝试使用 css 选择器而不是 xpath。

trends = driver.find_elements_by_css_selector('div[data-testid="trends"]')
trend = trends[0]
span = trend.find_element_by_xpath('.//span')
text = driver.execute_script("return arguments[0].innerText", span)

【讨论】:

  • 在使用 css 选择器 AttributeError: 'list' object has no attribute 'find_element_by_xpath' 后尝试了两种方法得到此错误。是驱动相关的问题吗?
  • 然后再次使用 css 选择器和列表对象。或像这样使用它:trends = driver.find_elements_by_css_selector('div[data-testid="trends"] span') 并忽略 span 变量并在执行脚本中使用趋势作为第二个参数。
  • 此后在控制台上打印“无”。趋势 = driver.find_elements_by_css_selector('div[data-testid="trends"] span') text = driver.execute_script("返回参数[0].innerText", 趋势)
  • 然后再次检查,我认为您没有针对正确的文本元素。我检查了网址。它不适合我。
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2017-09-27
  • 1970-01-01
相关资源
最近更新 更多