3

次の HTML コードを持つ:

<span class="warning" id ="warning">WARNING:</span>

XPath によってアクセス可能なオブジェクトの場合:

.//*[@id='unlink']/table/tbody/tr[1]/td/span

実際に名前を知らなくても、Selenium WebDriver + Python 2.7 を使用してその属性 ( class, id ) をカウントするにはどうすればよいでしょうか?

count = 2 のようなものを期待しています。

4

2 に答える 2

2

とった!これは、div、span、img、p、およびその他の多くの基本要素で機能するはずです。

element = driver.find_element_by_xpath(xpath) #Locate the element.

outerHTML = element.get_attribute("outerHTML") #Get its HTML
innerHTML = element.get_attribute("innerHTML") #See where its inner content starts

if len(innerHTML) > 0: # Let's make this work for input as well
    innerHTML = innerHTML.strip() # Strip whitespace around inner content
    toTrim = outerHTML.index(innerHTML) # Get the index of the first part, before the inner content
    # In case of moste elements, this is what we care about
    rightString = outerHTML[:toTrim]
else:
    # We seem to have something like <input class="bla" name="blabla"> which is good
    rightString = outerHTML
# Ie: <span class="something" id="somethingelse">

strippedString = rightString.strip() # Remove whitespace, if any
rightTrimmedString = strippedString.rstrip('<>') #
leftTrimmedString = rightTrimmedString.lstrip('</>') # Remove the <, >, /, chars.
rawAttributeArray = leftTrimmedString.split(' ') # Create an array of:
# [span, id = "something", class="somethingelse"]

curatedAttributeArray = [] # This is where we put the good values
iterations = len(rawAttributeArray)

for x in range(iterations):
    if "=" in rawAttributeArray[x]: #We want the attribute="..." pairs
        curatedAttributeArray.append(rawAttributeArray[x]) # and add them to a list

numberOfAttributes = len(curatedAttributeArray) #Let's see what we got
print numberOfAttributes # There we go

これが役立つことを願っています。

ありがとう、R.

PSこれは、空白を<、>、または/と一緒に削除するなど、さらに強化できます。

于 2013-03-21T09:23:13.920 に答える
0

簡単なことではありません。

すべての要素には、一連の暗黙的な属性と、明示的に定義された属性 (たとえば、選択済み、無効など) があります。結果として、私が考えることができる唯一の方法は、親への参照を取得し、JavaScript executor を使用して innerHTML を取得することです。

document.getElementById('{ID of element}').innerHTML

次に、innerHTML によって返されたものを解析して個々の要素を抽出する必要があります。次に、関心のある要素を分離したら、その要素を再度解析して属性のリストを抽出する必要があります。

于 2013-03-21T06:45:01.783 に答える