【问题标题】:Selenium get text in paragraph after divSelenium 在 div 之后的段落中获取文本
【发布时间】:2020-01-09 01:09:18
【问题描述】:

我有一个如下所示的页面:

当我们查看 HTML 代码时:

所以它首先在div 中给出段落的标题,然后在它下面会有段落。所以理想情况下我想做driver.find_element_by_link_text('Objectives of the Course')之类的事情,然后说“获取下一个元素”(即它下面的段落)。

如何使用 selenium 或任何其他库来做到这一点?


【问题讨论】:

  • 你能分享网址吗?解决方案必须是硒吗?

标签: python selenium xpath web-scraping webdriverwait


【解决方案1】:

要提取标题课程目标下方的<p>标签内的文本,您必须为visibility_of_element_located()诱导WebDriverWait,您可以使用以下任一Locator Strategies:

  • 使用 xpath 和 get_attribute():

    print(WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='FieldsetBaslik' and contains(., 'Objectives of the Course')]//following::p[1]"))).get_attribute("innerHTML"))
    
  • 使用 xpath 和 text:

    print(WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='FieldsetBaslik' and contains(., 'Objectives of the Course')]//following::p[1]"))).text)
    

结尾

根据文档:

【讨论】:

  • 虽然另一个答案更容易,但我认为这个更适合更复杂的任务,例如,当divs 具有相同的名称(@ 987654336@) 但文字不同
  • 看起来您建议的 xpath 是问题的答案。恕我直言,WebDriverWait 的东西与问题无关。例如,如果该 HTML 与页面一起静态加载,则没有理由等待它。
  • @ArnonAxelrod 你是对的。你观察到 html 中的== $0了吗?
【解决方案2】:

您可以将 XPATH 或 CSS 选择器与 find_element_by_css_selector 方法一起使用

在这个 HTML 中:

<div class="title"> title </div>
<p> content </p>

你可以用这个选择下一个兄弟:

div.title + p {
  color: red;
}

所以在你的情况下,driver.find_element_by_css_selector('div.FieldsetBaslik+p') 可以工作

查看此链接:https://developer.mozilla.org/en-US/docs/Web/CSS/Adjacent_sibling_combinator

【讨论】:

  • 该死的,这是一个简单的解决方案!,真棒你可以添加+p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
相关资源
最近更新 更多