2017-03-14 10 views
3

私はセレンを学んでいて、XPATHをよく理解しています。セレン - XPATH - innerHTMLで要素を探す

ウェブページには、動的に生成されたidclassの要素があります。私は以下を試しました:

code = driver.find_element_by_xpath("//*[contains(@text='someUniqueString')]") 

ただし、要素にはテキストがありません。代わりに、JSONを持つ<code>要素です。

<codestyle="display: none" id="something-crazy-dynamic"> 
    {"dataIWantToGrab":{"someUniqueString":...}} 
</code> 

は、私は何を探していることはXPATHを使用して一意の文字列を検索しinnerHTMLを検索するが、私は何か良いリソースを見つけることができないです。

私は

driver.find_element_by_xpath("//*[contains(@innerHTML='someUniqueString')]") 

を試してみたが、エラー

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //*[contains(@innerHTML='someUniqueString')] 

EDIT受け付けております。以下は、私が

https://gist.github.com/anonymous/b227e59c942e7ec9f5a851a3b7ecdfc6

で働いている兄弟のテキストへのリンクです

EDIT 2:これを回避することはできましたが、SeleniumではなくBeautifulSoup 。理想的ではありませんが、まだ解決策です。

//*[text()[contains(., 'someUniqueString')]] 

`demo

以上:あなたは内側のHTMLで一致したXPathを使用することはできませんが、 '内部テキスト' で一致するために使用することができ

soup = BeautifulSoup(driver.page_source) 
codes = soup.find_all("code") 
found_json = [i for i in codes if i.text.find("someUniqueString") > 0] 
+0

「id」の一部は定数であるか、それともすべて動的ですか? – Guy

+0

一定の部分がありますが、約15の要素が同じ命名規則を持っています – kmomo

+0

親、子、兄弟に依存することができます。関連するHTMLコード(要素の上下5要素)を共有してください。 –

答えて

8

XPathは、ターゲットテキスト 'someUniqueString'の親要素であるため、code要素を返します。

//*[contains(text(),'someUniqueString')] 

注:

+0

私が直面している問題は'innerTEXT'はnullを返していますが、' innerHTML'は – kmomo

+0

ではありません。@kmomo文字通り、私が意図した 'innerTEXT'ではありません。上のコードをご覧ください。 'innerHTML'はSeleniumなので、あなたはそれを使うことができるかもしれません。あなたのXPath式だけがビットオフで、 '='は '、'に置き換えなければなりません: 'contains(@ innerHTML、 'someUniqueString')' – har07

+0

これは動作しません。 'driver.find_element_by_xpath(" // * [contains(@innerHTML 、 'someUniqueString')] ')') '返す'メッセージ:要素を見つけることができません:// * [contains(@ innerHTML、 'someUniqueString')] ' – kmomo

1

は、次のXPathを試してみてくださいdisplay: noneで設定code要素として、要素はあなた要素を見つけることができますが、表示されません。 clickまたは他のAPIを使用して要素とやりとりしようとすると、ElementNotVisisbleExceptionが返されることがあります。簡単に言えば、GUI(ブラウザ)に表示されない要素と対話することはできません。


あなたは要素を見つけることができない場合は、お使いの要素がiframe内であることを良いチャンスがあります。このような場合、最初にフレームに切り替えてから、XPathを使用して要素を見つける必要があります。

フレーム間の切り替えに関する詳細here

関連する問題