2016-04-27 23 views
4

SeleniumとPython 2.7を使って、複数の「キーワード」を何らかの順序で使って要素を見つける方法があるのか​​不思議でした。私は例を使って説明することができます:複数のテキスト文字列で要素を検索するにはどうすればよいですか?

keyword1 = raw_input("Keyword: ").lower().title() 
keyword2 = raw_input("Keyword: ").lower().title() 

    try : 
     clickOnProduct = "driver.find_element_by_xpath(\"//*[contains(text(), '" + keyword1 + "')]\").click()" 
     exec(clickOnProduct) 

これはコードだけ抜粋ですが、どのように私は、これはいずれにもこれらのキーワードの両方が含まれている要素(KEYWORD1、KEYWORD2)を探すために組み込むことができます注文?原理的には簡単だと思いますが、おそらくそうですが、これを取得しようとしている時があります。どんな提案も大変ありがとうと思います。あなたが動的にorとを使用してXPath式を構築することができます

答えて

6

keywords = [keyword1, keyword2, ... ] 
conditions = " or ".join(["contains(., '%s')" % keyword for keyword in keywords]) 
expression = "//*[%s]" % conditions 

elm = driver.find_element_by_xpath(expression) 

例えば、keyword1hellokeyword2になり、場合worldなり、expressionはなる:

//*[contains(., 'hello') or contains(., 'world')] 

大文字と小文字の両方を扱う場合は、translate()を使用する必要があります。詳細はこのrを参照してください。 elevantスレッド:

+0

私はまだ問題を抱えているようです。式は '// * [(。、 'Coat')を含むか、(。、 'Car')]'を含みますが、それでも "Car Coat"というテキストを含む要素は見つかりません。 –

+0

本当にありがとう、私の部分では簡単な間違いでした。 .join(["contains(。、 '%s')" '' .join(["contains(text()、 '%s')" 'に変更して問題を解決しました。 –

関連する問題