【问题标题】:Find element by text and print the next/previous sibling按文本查找元素并打印下一个/上一个兄弟
【发布时间】:2014-07-12 12:01:32
【问题描述】:

我正在尝试抓取此页面的内容, http://targetstudy.com/school/62292/universal-academy/

担心的是,有时数据是按这个顺序排列的 名称-地址-Pin-Mobile-等。 有时地址不存在, 姓名-密码-手机

没有定义特定的类,我不确定使用哪个 xpath 来获取确切的文本。我正在使用 Selenium Python。

我们可以做一些事情,比如按文本查找元素并打印父级的下一个兄弟。 让我举个例子来澄清一下,

<td>
  <b>Address :</b>
  "  Sri Saadhuraam Parisar, Kosamnara, Kotra Road Raigarh "
  </td>

有没有办法通过文本“地址:”查找元素并让它打印下一行“Sri Saadhuraam Parisar, Kosamnara, Kotra Road Raigarh”

谁能给点建议。提前致谢。

到目前为止,这是我的代码的一部分,

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains
import lxml.html
from selenium.common.exceptions import NoSuchElementException

path_to_chromedriver = 'chromedriver.exe'
browser = webdriver.Chrome(executable_path = path_to_chromedriver)
browser.get('http://targetstudy.com/school/62292/universal-academy/')
stuff = browser.page_source.encode('ascii', 'ignore')
tree = lxml.html.fromstring(stuff)
address1 = tree.xpath("//td[contains(text(), 'Address')]/text()")
print address1

【问题讨论】:

    标签: python selenium xpath lxml lxml.html


    【解决方案1】:
    //b[contains(.,'Address')]/parent::td/text()
    

    这可能会有所帮助,获取地址元素,“跳转”到作为 td 的父元素并获取文本

    【讨论】:

      【解决方案2】:

      如果地址总是在&lt;b&gt;标签中,可以使用:

      //td[contains(b[1], 'Address')]/child::text()
      

      【讨论】:

      • 在这个示例网站中可能没问题,但您可能需要在一般情况下明确选择以下文本兄弟,否则,td 的先前文本子项,我的意思是在 b 之前,会被选中。我会使用//td/b[contains(., 'Address')]/following-sibling::text()
      猜你喜欢
      • 2014-07-16
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2019-12-21
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多