2012-06-12 2 views
2

page에서 회사 이름에 액세스하려고합니다.html 노드에서 null을 반환합니다.

"Cascade corporation"의 innertext가있는 노드를 반환해야하지만 대신 null이 반환됩니다.

HtmlNode htest = document.DocumentNode.SelectSingleNode("//*[@id='appbar']/div/div[2]/div[1]/span"); 

무엇이 누락 되었습니까?

P. 크롬과 함께 사용해야합니다

+1

해당 페이지의 어디에서나 'Cascade corporation'을 찾을 수 없습니다. –

+0

대단히 죄송합니다. 방금 고정했습니다 – jth41

답변

0

appbar의 요소가 없습니다. appbar-hide이라는 클래스가있는 div 만 있으며 소스에 Appbar가있는 유일한 장소입니다.

이와 같은 문제에 직면 할 때는 단계별 접근 방식을 시도하십시오. 먼저 HtmlNode htest = document.DocumentNode.SelectSingleNode("//*[@id='appbar']");으로 시작하는 xpath에서 첫 번째 노드를 선택합니다.이 경우 오류가있는 곳에서 null을 반환합니다. 그런 다음 오류를 정정하고 나머지가 잘되었다고 확신하는 경우 전체 xpath를 다시 시도하십시오. 그런 다음 오류가 다시 발생하면 두 번째 요소 인 Ie로 다시 가져옵니다. //*[@id='appbar']/div 그리고 원하는 것을 얻을 때까지이 과정이 진행됩니다.

+0

id가 appb 인 div가 있습니다. id가 fjfe-click-wrapper 인 다른 div에 있습니다. –

+0

@AshBurlaczenko 내 컴퓨터에 없습니다 –

+0

어떤 브라우저. 개발자 도구 나 소스 코드를 확인하고 있습니까? –

3

내 컴퓨터에서 문제를 재현하려고했습니다. Fiddler를 사용하여 응답 데이터 &을 캡처했습니다. 나는 브라우저에서 렌더링 된 html 출력이 내 코드와 다르다는 사실에 놀랐다.

피들러 (Fiddler)의 필자와의 차이점은 사용자 에이전트 값입니다. 나중에 나는이 코드를 생각해 냈고 그것은 나에게 효과적이다. 시도해보고 알려주세요. 제발 투표하지 마세요. 내가 문제를 재현 할 수 있어요 사용자 에이전트 라인을 주석 때 나는 .. 나중에 당신을 도울

string url = "http://www.google.com/finance?q=NASDAQ:TXN&fstype=ii"; 
HtmlWeb web = new HtmlWeb(); 
web.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0"; // latest firefox 
HtmlDocument doc = web.Load(url); 

var node = doc.DocumentNode.SelectSingleNode("//*[@id='appbar']/div/div[2]/div[1]/span") 
//var node = doc.DocumentNode.SelectSingleNode("//div[@class='appbar-snippet-primary']/span") 

을 시도하고있다. 희망이 도움이됩니다.

+0

예 코드에서 올바른 결과를 얻습니다. 그러나 크롬으로 작업 할 수 있어야합니다. 어떤 제안? – jth41

+0

"Chrome과 함께 작동시켜야한다는 사실을 꼭 알아야합니다."라는 의미가 확실하지 않습니다. C# 코드이므로 Chrome이이 작업에 필요하지 않습니다.이 사이트를 긁어 모으는 코드를 작성하고 있다고 생각합니까? 너를 이해하는데 내가 틀렸어? –

+0

Chrome을 독점적으로 사용하는 사람을위한 선물로이 글을 쓰고 있습니다. – jth41

관련 문제