我正试图从这个元素中提取文本。
<div class="_pac" data-bt="{"ct":"sub_headers"}"><a href="https://www.facebook.com/pages/%EB%B6%81%EC%9D%BC%EC%97%AC%EC%9E%90%EA%B3%A0%EB%93%B1%ED%95%99%EA%B5%90/110634532291267">북일여자고등학교</a><div class="_1my"></div></div>
我想从这个元素中提取文本:
'북일여자고등학교'
到目前为止,我试过了。
content = driver.find_element_by_css_selector('div._pac')
for i in content:
i.get_attribute('text')
但是,它没有返回任何东西。我怎样才能提取文本?
似乎有多个 div
同级 _pac
在你的页面上。在你的情况下,它是定位第一个元素,而这个元素没有文字。
find_element
方法是在同一个元素出现多次的情况下定位验证第一个元素。
尽量使你的定位器更加独特和具体,以定位单个元素。参考下面的代码。
content = driver.find_element_by_xpath("//div[contains(@data-bt,'sub_headers')]/a")
content.text
看起来你是在循环内容,但你用的是 find_element
而不是 find_elements
于是改成 find_elements
办法
使用下面的代码循环浏览同一元素中的所有文本。
content = driver.find_elements_by_css_selector('div._pac')
for element in content:
print(element.text)
所需文字 북일여자고등학교 属于子女 <a>
父节点 <div>
节点。
要打印文本 북일여자고등학교 你要诱导 WebDriverWait 对于 visibility_of_element_located()
您可以使用以下任何一种方式 定位策略:
使用 CSS_SELECTOR
和 .get_attribute("innerHTML")
:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div._pac>a[href^='https://www.facebook.com/pages']"))).get_attribute("innerHTML"))
使用 XPATH
和 文字 属性。
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='_pac']/a[starts-with(@href, 'https://www.facebook.com/pages')]"))).text)
注 : 你必须添加以下导入。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
两个背靠背执行的控制台输出。
북일여자고등학교
你可以在相关的讨论中找到 如何使用Selenium检索一个WebElement的文本 - Python
链接到有用的文档。
get_attribute()
方法 Gets the given attribute or property of the element.
text
属性返回 The text of the element.
要从以下地方提取文本 <a>
如你所言,请使用这个css选择器。div._pac > a
. 请试试这个解决方案。
content = driver.find_element_by_css_selector('div._pac > a')
print(content.text)
#or use '.get_attribute'
print(content.get_attribute("innerHTML"))
如果页面上有多个相同分类的元素,你可以使用 .find_elements_*
它将返回一个webelemet的列表,并通过循环提取它们。
content = driver.find_elements_by_css_selector('div._pac > a')
for el in content:
print(el.text)
#or use '.get_attribute'
print(el.get_attribute("innerHTML"))