web-dev-qa-db-ja.com

SeleniumでJavascriptコードの戻り値を取得する

私は自分のウェブサイトのいくつかの自動テストにSelenium2を使用していますが、Javascriptコードの戻り値を取得できるようにしたいと考えています。 Webページにfoobar() Javascript関数があり、それを呼び出して戻り値をPythonコードに取得したい場合、何を呼び出すことができますか?

94
Eli Courtwright

値を返すには、execute_script()メソッドに渡される文字列でreturn JavaScriptキーワードを使用するだけです。

>>> from Selenium import webdriver
>>> wd = webdriver.Firefox()
>>> wd.get("http://localhost/foo/bar")
>>> wd.execute_script("return 5")
5
>>> wd.execute_script("return true")
True
>>> wd.execute_script("return {foo: 'bar'}")
{u'foo': u'bar'}
>>> wd.execute_script("return foobar()")
u'eli'
157
Eli Courtwright

Varが返す変数である最後にreturn var;を追加するだけで、以下のサンプルコードのように関数として記述されたコードがなくても値を返すことができます。

result = driver.execute_script('''cells = document.querySelectorAll('a');
URLs = []
console.log(cells);
[].forEach.call(cells, function (el) {
    if(el.text.indexOf("download") !== -1){
    //el.click();
    console.log(el.href)
    //window.open(el.href, '_blank');
    URLs.Push(el.href)
    }
});
return URLs''')

resultには、この場合URLsにある配列が含まれます。

4