私はこの間違いについて考えているに違いありません。
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ページでそれらを見ることができるので、要素に内容があることがわかります。
しかし、コンテンツをデータに戻す必要があります。
これを読むにはどうすればよいですか?さまざまなタイプの要素からコンテンツを取得できるように、一般的な方法で行うことが好ましい。
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()
element.get_attribute('innerHTML')
あなたが「コンテンツ」と言ったとき、あなたはこれを意味していなかったことを知っていますが、ウェブ要素のすべての属性のすべての値を見つけたい場合、これは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__
を使用して追加のデータを取得することもできます。
これは、ウェブ要素から取得したいすべてのデータに関するものだと思います。
私の答えはこの答えに基づいています: 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()