2016-04-06 9 views
1

後のdivからテキストを取得します。Pythonのセレンは、どのように私はスパン後のdiv内のテキストを選択したいスパン

ソースは次のようになります。

<div id="citation"> 
    <cite>Journal</cite> 
    ", " 
    <span class="year">2014</span> 
    ", " 
    <span class="volume">100</span> 
    " (4), pp 100-200" 
</div> 

私だけ "(4)、頁100-200" をしたいです。

私は、全体のdivのうち、テキスト、または各スパンを取得する方法を知っているが、どのように私は最後のテキストをつかむのですか?このXPATHは機能しません。 ISSUE_XPATH = "// * [@ ID = \" 引用\ "] /テキスト()[3]"

このエラーメッセージを示しています。

selenium.common.exceptions.InvalidSelectorExceptionを:メッセージ:{」 ErrorMessage ":" "// * [ID @ = \" 引用\ "] \ XPath式の結果/テキスト()[3] \" である:[オブジェクトテキスト]それは要素でなければなりません「。

答えて

1

残念ながら、//*[@id=\"citation\"]/text()[3]はセレンで仕事に行くのではありません - あなたは、実際の要素ではなく、テキストノードをターゲットにすることができます。

from bs4 import BeautifulSoup 

citation = driver.find_element_by_id("citation") 
html = citation.get_attribute("outerHTML") 

soup = BeautifulSoup(html, "html.parser") 
desired_text = soup.find("span", class_="volume").next_sibling 
print(desired_text) 
+0

ありがとう:私はこのような場合にはどうなるのか

はさらにclass="volume"span要素の後に特定のテキストの兄弟を見つけるために役立つだろうBeautifulSoup HTMLパーサーを使用することです!私はそのコードを試しましたが、私はこのエラーが発生し続けます: 'AttributeError: 'NoneType'オブジェクトに属性がありません 'next_sibling''なぜ私は分かりません。 – moglido

+0

@moglido 'html'を印刷するとどうなりますか?ありがとう。 – alecxe

+0

htmlを印刷すると、上のdivのHTMLが表示されます。ただし、ターミナル出力のテキストの前後に引用符はありません。 – moglido

関連する問題