2014-11-20 1 views
1

테스트 용 RSS 피드의 정보를 구문 분석하려고합니다. 나는 테스트를 위해 CasperJS를 사용하고 스크린 샷을 캡처하기 위해 PhantomJS를 사용하고 있습니다. RSS 피드를 탐색 할 때 스크린 샷을 찍어 모든 XML 태그가 제거되고 텍스트가 텍스트임을 확인했습니다. 내 테스트를 위해 피드의 pubDate 태그 값이 필요하므로 태그가 필요합니다. 어쨌든 원본 양식으로 피드를 가져올 수 있습니까? 다음은 PhantomJs는 RSS 피드에서 모든 XML 태그를 제거합니다.

checkRSSFeed = function() { 
    //first I navigate to a certain page in my website 
    var href = ''; 

    casper.then(function() { 
     this.test.assertExists(x('//a[contains(@href, "SUBSTRING OF URL")]'), 'the element exists'); 
     href = casper.getElementAttribute(x('//a[contains(@href, "SUBSTRING OF URL")]'), 'href'); 
    }).then(function() { 
     this.open(href); 
    }).then(function() { 
     this.echo(this.getCurrentUrl()); 
     casper.capture(PATH_TO_SCREENSHOT); 
    }); 
}; 

는 PhantomJS

enter image description here

+0

그래서 'href' 변수에 rss 피드 URL이 포함되어 있습니까? '캡처'는 단계의 내부에서 수행되어야합니다. 올바른 스크린 샷을 얻지 못하고 있습니다. 'casper.getPageContent()'는 무엇을 반환합니까? –

+0

잘못된 코드에 대한 사과는 실제로 '다음'기능 안에 있습니다. 이 코드는 실제로이 코드를 입력 할 때이 오류가 발생합니다. 나는 그것을 고쳤다. 하지만 예, href에 RSS 피드 URL이 포함되어 있습니다 (나쁜 변수 이름은 유감입니다). 그리고 'then'함수 안에있는 캡처는 xml 태그가없는 RSS 피드의 스크린 샷을 제공합니다. – user2076106

답변

2

PhantomJS 볼 RSS 버전의 스크린 샷입니다 HTML과 같은 임의의 마크 업을 해석 브라우저입니다. 따라서 RSS 피드를 페이지로 열어도 HTML을 렌더링하려고 시도합니다. 그러나 RSS 요소 (태그)는 HTML과 같은 의미가 없으므로 일반 블록 요소로 렌더링됩니다.

사실 일부 브라우저는 RSS 피드를 특정 방식으로 표시하지만 PhantomJS는 표시하지 않습니다. 그것이 의미하는 바는 casper.capture이 작업을위한 잘못된 도구라는 것입니다. 전체 페이지 내용 (RSS 피드 소스)을 반환하려면 casper.getPageContent이 필요합니다.

RSS 피드 요소 (casper.getElementAttribute 및 다른 것들은 여전히 ​​작동 함)에서 여전히 작업을 수행 할 수 있지만 특히 네임 스페이스를 기반으로 요소를 선택해야하는 경우 slight workaround을 수행해야합니다. 네임 스페이스 관련 선택기를 사용하지 않으려면 //*[local-name()='link']과 같은 local-name()과 함께 CSS 선택기 또는 XPath 식을 사용하십시오.

+0

분명히 코드 수정이 작동하지 않습니다. 내 코드에서 편집을보십시오. pubDate가 업데이트되지 않습니다. 내 XPATH를 확인했는데 정확합니다. pubDate가 존재하고 거기에 실패하면 주장하려고했습니다. 이견있는 사람 ? – user2076106

+0

질문을 다른 질문에 편집했습니다. 내 대답은 미래의 독자에게는 더 이상 의미가 없을 것입니다. 원래 문제가 해결되었습니다. 추가 문제가있는 경우 새로운 질문을하십시오. 그렇게 할 때 샘플 XML 및 사용자가 시도한 XPath 식을 포함하는 것을 잊지 마십시오. –

+0

글쎄, getPageContent()가 실제로 페이지를 원래 형식으로 가져 오는 지 어떻게 확인할 수 있습니까? getPageContent가 무엇을하는지는 알지만 그것을 검증 할 수있는 방법이 있습니까? 그것이 없다면, 원래의 질문 자체는 확인되지 않았습니다. 맞습니까? – user2076106