11

私はSeleniumのPythonライブラリを使用して、Firefoxのhtmlページからデータを取得しています。

サーバーがFirefoxを更新したため、Selenium2.0から2.21に更新する必要がありました。

v 2.21では、への呼び出しは次のようにfind_element_by_class_name("grid-cell-inner grid-col-name")失敗します。

selenium.common.exceptions.WebDriverException: Message: u'Compound class names not permitted'

アクセスしようとしている要素のクラス名はgrid-cell-inner grid-col-name

の呼び出しはfind_element_by_class_name()v2.2で機能したため、ロジックは正しく、データは以前は問題なく検出されていました。v2.21で何かが変更されました。

すべてのSeleniumの例は、クラス名などの簡単な例を示してfooいますが、アクセスする必要のある名前のタイプの例はありません。

Seleniumがのような名前のクラスの検索をサポートしgrid-cell inner grid-col-nameなくなったのはなぜですか?その解決策は何ですか?

誰かが「複合」クラス名を持つ要素を見つけるのを手伝ってくれませんか?

4

5 に答える 5

15

WebDriver の問題は、まだ進化していることです。多くの。個人的には、1 つのコマンドで多くのクラスによる検索をサポートするバージョンを知らないので、かなり古いバージョンだったに違いありません :)。

ただし、 CSS セレクターによる検索は機能するはずです。

find_element_by_css_selector(".grid-cell-inner.grid-col-name");

以下の 2 つの式は別のものであるため、この特定の目的でXPathを使用することはお勧めしません。

//*[class='grid-cell-inner grid-col-name']

//*[class='grid-col-name grid-cell-inner']

于 2012-05-20T11:02:03.980 に答える
7

「.nameA.nameB.nameC」の形式で CssSelector を使用する必要があります。「.」を追加するだけで、いくつでも使用できます。

または、属性全体を一致させることもできます (xpath を使用してこれを行うこともできます): " [class='exact class name here']" XPath - "// [@class='exact class name here']"

クラスが動的に生成される場合に役立つ (CSS と xpath の両方で)開始、終了、または含む方法あります。

于 2012-08-27T10:57:51.300 に答える
0

Selenium は長い間、複合クラス名をサポートしていないと思いました。

言うまでもなく、XPath または CSS セレクターを使用するか、"grid-cell-inner" のクラス名で試してから、フィルタリングして、"grid-cell-inner grid-col-name" のクラスを持つ要素を確認します。

于 2012-05-18T23:33:12.240 に答える