使用Selenium和Python提取div类下的文本。

问题描述 投票:0回答:1

我正试图从这个元素中提取文本。

<div class="_pac" data-bt="{&quot;ct&quot;:&quot;sub_headers&quot;}"><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')

但是,它没有返回任何东西。我怎样才能提取文本?

selenium xpath css-selectors python-3.6 webdriverwait
1个回答
0
投票

似乎有多个 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)

0
投票

所需文字 북일여자고등학교 属于子女 <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


外景

链接到有用的文档。


0
投票

要从以下地方提取文本 <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"))
© www.soinside.com 2019 - 2024. All rights reserved.