2016-09-30 2 views
0

PhantomJS를 사용하여 웹 페이지에서 값을 선택하는 방법은 무엇입니까? 다음은 html 코드입니다.PhantomJS - 페이지에서 값 선택

443 번 패스에서 값을 선택하고 싶습니다. 여기에 내 코드가 있지만 null을 반환합니다.

var page = require('webpage').create(); 
var url = 'http://localhost:9001/'; 

page.open(url, function (status) { 
    if (status === 'success') { 
    var input = page.evaluate(function() { 
     return document.querySelectorAll("li.passes").value; 
    }, 2000); 
    console.log(input); 
    phantom.exit(); 
    } 
}); 

답변

1

document.querySelectorAll("li.passes")은 선택과 일치하는 단일 li 요소 컬렉션을 반환합니다. 코드를 document.querySelectorAll("li.passes > em")[0].textContent으로 변경해야합니다. 이 내용은 li 안에있는 em과 일치하며 텍스트 내용을 반환합니다.

1

li 태그에 값이 없으며 innerText 또는 innerHTML이 있습니다. 이 경우 innerHTML에는 anchor 태그와 emphasis 태그라는 두 개의 자식이 있습니다. 당신은 당신이 강조됩니다 가져 오는 무엇의 모든 인스턴스, 당신은 대신에, 전각 필드에 대한 각각의 반환 값을 조회하고 최종 값을 얻기 위해 그의 innerHTML을 얻을 수 있는지 확인하는 경우

console.log(input) 

당신이

if (input.length === 0) { 
    console.log('No passes found.'); 
} else { 
    for (var ndx = 0; ndx < input.length; ndx++) { 
    console.log(input[ndx].querySelector('em').innerText); 
} 

것 내가 할 수있는 나는 당신의 원본 코드에 가깝게 답을 유지하지만, 입력 [NDX] 더 엠 태그가없는 경우 나, 일부 오류 검사에서 즉 퍼팅 추천 할 것입니다. em 필드가없는 클래스를 무시해야한다면 원래의 querySelectorAll ('. classes> em')에 em 자손을 포함시킬 수 있습니다.

당연히 html을 직접 작성하는 경우 태그 엠 필드 (또는 값이 어디에 있든)에 표시하고 많은 번거 로움을 없애줍니다.