2016-06-12 2 views
0

https://groups.yahoo.com/api/v1/groups/concatenative/messages/300과 같은 URL을 고려하십시오. 내가 셀레늄에서 JSON에 액세스하고 싶습니다원시 페이지 원본을 가져 오는 방법은 무엇입니까?

enter image description here

: 이것은 application/json 반응이다. (개인 그룹에 액세스해야하기 때문에 Selenium을 사용하고 있는데 mechanicalsoup 등을 통해 로그인하는 방법을 알아 내려고하지 않았습니다.) 그러나 페이지 소스를 얻는 것은 브라우저가있는 방식으로 입니다. json으로을 제시하지 JSON 자체가 다음 JSON 일부 HTML 및 사전 요소에 싸여 있음을

>>> self.br.driver.page_source 
'<html xmlns="http://www.w3.org/1999/xhtml"><head><link title="Wrap Long Lines" href="resource://gre-resources/plaintext.css" type="text/css" rel="alternate stylesheet" /></head><body><pre>{"ygPerms":{"resourceCapabilityList":[{"resourceType":"GROUP","capabilities":[{"name":"READ"},{"name":"JOIN"}]},{"resourceType":"PHOTO","capabilities":[]},{"resourceType":"FILE","capabilities":[]},{"resource ... 

참고.

어떻게 JSON을 직접 가져올 수 있습니까? 브라우저가 앞으로이 JSON 응답을 어떻게 표현할 지 모르기 때문에 <body>에있는 <pre>의 내용을 얻는 것은 해킹 인 것처럼 보입니다.

답변

1

JSExecutor로 json을 직접 받으려면 AJAX를 보낼 수 있습니다. 아래 예를 참조하십시오.

driver.get("https://groups.yahoo.com/api/v1/groups/concatenative/messages/300") 
driver.set_script_timeout(10) 
response = driver.execute_async_script(
    "console.log('Start AJAX');" + 
    "var callback = arguments[arguments.length - 1];" + 
    "var http = new XMLHttpRequest();" + 
    "var url = '/api/v1/groups/concatenative/messages/300';" + 
    "http.open('GET', url, true);" + 

    "http.onreadystatechange = function() {" + 
    " if(http.readyState == 4) {" + 
    "  callback(http.responseText);" + 
    " };" + 
    "};" + 
    "http.send();") 
print(response) 
+0

감사합니다. C#에서 JS 및 CSS 파일을 ChromeDriver에서 다운로드하고이 방법을 사용하는 방법을 찾고있었습니다. 변경 만 수행하면 AsynchronousJavaScript 시간이 5 초가됩니다. 그렇지 않으면 0 초 후에 시간이 초과되기 때문입니다. – Qjimbo

관련 문제