2017-08-25 41 views
0

Python 3とSeleniumを使用してページから特定の要素を選択しようとしています。すべてのちょうどこのようにフォーマットされている正しい要素を選択する方法(Python 3、Selenium)

ページは、長いリストで構成されています(項目の数百):

enter image description here

をこのテーブルのHTMLは次のようになります。

enter image description here

そして、私がクリックしようとしている特定の項目の要素を展開すると、次のようになります(プライバシーのために隠されたリンク):

私はこれまでやっている何を

enter image description here

は、私は時間のいくつかの作品

titleField = 'Zombie Apocalypse' 
searchBuilder = "//*[contains(text(), '" + titleField + "')]" 
searchForBook = browser.find_elements_by_xpath(searchBuilder) 
searchForBook[0].click() 

を使用して必要な要素を検索するためです。私は同じ名前の2つの項目があるとき、またはタイトルにアポストロフィがあるときに問題に遭遇しています。なぜそれが全く機能しなかったのか分からないことがあります。

私が使用している方法よりも、そのテーブルから個々の要素を選択する良い方法はありますか?アイテムのタイトルは、ID番号ではなく、前もって取得します。 ID番号は私が掻き取ろうとしている情報です。

ID番号がそのURLに含まれているので、検索でアイテムのURLが返されても大丈夫ですので、そこから引き出すことができます。しかしタイトルはURLにないので、検索する方法はわかりませんでした。

+0

テーブル内のID番号フィールドを掻き取ることは可能でしょうか?あなたはID番号のすべてを取得し、それは比較的一貫しているように見えるこの方法。あなたが特定のアイテムを探していない限り、テーブルの各URLを取得し、自分の名前フィールドを自分のものと比較することを提案します。 – OmegaNalphA

+0

それは考えです。テーブルをそのままにして、各URLの名前フィールドを取得するにはどうすればよいですか?私が必要とするのはID番号だけですが、特定のアイテムのためには必要です。 – Oxymoronica

+0

同じ名前のアイテムが2つ以上ある場合、どちらをクリックするか、または両方をクリックしますか? – ands

答えて

0

XPath式に挿入する前に、テキストを引用する必要があります。これはxpath式のyoyr文字列を適切にエンコードします。 "quoteattr"エスケープには、周囲に'または"が含まれています。

from xml.sax.saxutils import quoteattr 
titleField = quoteattr('Zombie Apocalypse') # But may contain XML markup chars 
searchBuilder = "//*[contains(text(), " + titleField + ")]" 
searchForBook = browser.find_elements_by_xpath(searchBuilder) 
searchForBook[0].click() 
+0

私は自分のコンピュータにいませんが、すぐに私はあなたにこのメッセージが表示されます。これは正しい軌道にあるかもしれません。 – Oxymoronica

関連する問題