Selenium에서 Javascript 코드의 반환 값 가져 오기


102

내 웹 사이트의 일부 자동화 테스트에 Selenium2를 사용하고 있으며 일부 Javascript 코드의 반환 값을 얻고 싶습니다. 나는이 있다면 foobar()내 웹 페이지에서 자바 스크립트 기능을 내가 그 전화를 내 파이썬 코드로 반환 값을 얻으려면, 나는 그것을 무엇을 호출 할 수 있습니다?

답변:


166

값을 반환하려면 메서드에 return전달 된 문자열에 JavaScript 키워드를 사용하십시오.execute_script()

>>> 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'

변수가 자바 스크립트에 의해 정의되지 않은 경우 반환 값은 무엇입니까? 예외 또는 단순히 빈 문자열이 발생합니까?
Alex

변수가 정의되지 않은 경우 다음을 반환합니다.None
dbJones

7
그 newbs에 대한 빠른 메모는 return_value = wd.execute_script("return {foo: 'bar'}")나중에 프로그램에서 사용할 반환 값을 저장합니다.
ntk4 2016 년

1
문서는 지정 결여 Retruns을 : 메모를. teir Usage : sample에서는 문서 제목을 반환하는 js를 넣습니다. 더 나은 명시 적으로 지정 Retruns을 : 자신의 문서에
woodz

7

아래 예제 코드와 같이 코드를 함수로 작성하지 않은 경우에도 return var;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''')

resultURLs이 경우 배열이 포함됩니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.