【问题标题】:Selenium is returning empty text for elements that definitely have textSelenium 正在为肯定有文本的元素返回空文本
【发布时间】:2021-07-07 04:30:55
【问题描述】:

我正在练习尝试抓取我大学的课程目录。我在 Python 中有几行代码可以在 Chrome 中打开 url,然后单击搜索按钮以调出课程目录。当我使用find_elements_by_xpath() 提取短信时,它返回空白。当我在 Chrome 上使用开发工具时,那里肯定有文字。

from selenium import webdriver
import time

driver = webdriver.Chrome()
url = 'https://courses.osu.edu/psp/csosuct/EMPLOYEE/PUB/c/COMMUNITY_ACCESS.OSR_CAT_SRCH.GBL?'
driver.get(url)
time.sleep(3)

iframe = driver.find_element_by_id('ptifrmtgtframe')
driver.switch_to.frame(iframe)
element = driver.find_element_by_xpath('//*[@id="OSR_CAT_SRCH_WK_BUTTON1"]')
element.click()
course = driver.find_elements_by_xpath('//*[@id="OSR_CAT_SRCH_OSR_CRSE_HEADER$0"]')
print(course)

我正在尝试从元素“OSU_CAT_SRCH_OSR_CRSE_HEADER”中提取文本。我不明白为什么它不返回文本值,尤其是当我使用开发工具看到它包含文本时。

【问题讨论】:

  • 你没有在等待。 Selenium 的痛点之一是它可以实时工作。如果站点需要 1/2 秒来更新页面,那么您需要等待。有一种方法可以说“等到这个元素出现”,但我不记得 API 名称了。
  • 您是否尝试了更多时间或再次延迟?看起来内容还没有准备好。

标签: python selenium parsing selenium-webdriver web-scraping


【解决方案1】:

您没有使用text,这就是您没有收到文本的原因。

course = driver.find_elements_by_xpath('//*[@id="OSR_CAT_SRCH_OSR_CRSE_HEADER$0"]').text

在最后第二行尝试上述更改

以下是修改后的完整代码

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
import time

driver = webdriver.Chrome()
url = 'https://courses.osu.edu/psp/csosuct/EMPLOYEE/PUB/c/COMMUNITY_ACCESS.OSR_CAT_SRCH.GBL?'
driver.get(url)
time.sleep(3)

iframe = driver.find_element_by_id('ptifrmtgtframe')
driver.switch_to.frame(iframe)
element = driver.find_element_by_xpath('//*[@id="OSR_CAT_SRCH_WK_BUTTON1"]')
element.click()
# wait 10 seconds
course = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="OSR_CAT_SRCH_OSR_CRSE_HEADER$0"]'))
).text
print(course)

【讨论】:

  • 谢谢!我必须添加一个额外的 'time.sleep()' 以允许网站运行,但添加 .text 允许我提取文本
  • 我已经更新了代码,而不是使用 time.sleep。最好使用Driver Wait
  • 如果您的问题解决了,请采纳答案
猜你喜欢
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 2018-03-25
  • 2016-02-11
  • 2020-10-07
  • 1970-01-01
相关资源
最近更新 更多