web-dev-qa-db-ja.com

Webdriverで要素の現在のコンテンツを取得するにはどうすればよいですか

私はこの間違いについて考えているに違いありません。

Webdriver/Selenium 2でアクセスしているページで、要素(この場合はフォームフィールド)のコンテンツを取得したい

ここに私の壊れたコードがあります:

 Element=driver.find_element_by_id(ElementID)
 print Element
 print Element.text

結果は次のとおりです。

<Selenium.webdriver.remote.webelement.WebElement object at 0x9c2392c>

(空白行に注意してください).sendkeysを使用して前のコマンドで要素を詰め込んだだけで、スクリプトの実行中に実際のWebページでそれらを見ることができるので、要素に内容があることがわかります。

しかし、コンテンツをデータに戻す必要があります。

これを読むにはどうすればよいですか?さまざまなタイプの要素からコンテンツを取得できるように、一般的な方法で行うことが好ましい。

55
Skip Huffman

Prestomanifestoは正しい方向に向かっていたと思います。それはどんな種類の要素に依存します。入力要素にelement.get_attribute('value')を使用し、要素のテキストノードを返すにはelement.textを使用する必要があります。

element.tag_nameを使用してWebElementオブジェクトをチェックし、それがどのような要素であるかを調べ、適切な値を返すことができます。

これにより、次のことがわかります。

driver = webdriver.Firefox()
driver.get('http://www.w3c.org')
element = driver.find_element_by_name('q')
element.send_keys('hi mom')

element_text = element.text
element_attribute_value = element.get_attribute('value')

print element
print 'element.text: {0}'.format(element_text)
print 'element.get_attribute(\'value\'): {0}'.format(element_attribute_value)
driver.quit()
70
Isaac
element.get_attribute('innerHTML')
17
xingpei Pang

あなたが「コンテンツ」と言ったとき、あなたはこれを意味していなかったことを知っていますが、ウェブ要素のすべての属性のすべての値を見つけたい場合、これはPythonのjavascriptでそれを行う非常に気の利いた方法です:

everything = b.execute_script(
    'var element = arguments[0];'
    'var attributes = {};'
    'for (index = 0; index < element.attributes.length; ++index) {'
    '    attributes[element.attributes[index].name] = element.attributes[index].value };'
    'var properties = [];'
    'properties[0] = attributes;'
    'var element_text = element.textContent;'
    'properties[1] = element_text;'
    'var styles = getComputedStyle(element);'
    'var computed_styles = {};'
    'for (index = 0; index < styles.length; ++index) {'
    '    var value_ = styles.getPropertyValue(styles[index]);'
    '    computed_styles[styles[index]] = value_ };'
    'properties[2] = computed_styles;'
    'return properties;', element)

element.__dict__を使用して追加のデータを取得することもできます。

これは、ウェブ要素から取得したいすべてのデータに関するものだと思います。

0
Roskoe

私の答えはこの答えに基づいています: webdriver の要素の現在のコンテンツをコピー/ペーストのように取得するにはどうすればよいですか?.

from Selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://www.w3c.org')
element = driver.find_element_by_name('q')
element.send_keys('hi mom')

element_text = element.text
element_attribute_value = element.get_attribute('value')

print (element)
print ('element.text: {0}'.format(element_text))
print ('element.get_attribute(\'value\'): {0}'.format(element_attribute_value))


element = driver.find_element_by_css_selector('.description.expand_description > p')
element_text = element.text
element_attribute_value = element.get_attribute('value')

print (element)
print ('element.text: {0}'.format(element_text))
print ('element.get_attribute(\'value\'): {0}'.format(element_attribute_value))
driver.quit()
0
Alex F.