2013-12-17 3 views
0

Html 민첩성 팩을 사용하여 "Pool Hashrate"의 가치를 얻으려고합니다. 바로 문자열 해시를 맞았을 때 { "객체 참조가 객체의 인스턴스로 설정되지 않았습니다."}. 누군가 내가 무엇을 잘못하고 있는지 말해 줄 수 있습니까?Html 민첩성 팩을 사용하여 웹 페이지에서 가치를 얻으십시오.

+0

Fizzler을 사용

난 HTML을 민첩성 팩을 기반으로 한 믿습니다. 나는 이것을 분해하고 InnerText를 버리고 노드에 foreach를 수행하고 노드가 있고 그 안에 무엇이 있는지 디버그합니다. – Harrison

+0

비슷한 문제가 있었는지 확인해주세요. (http://stackoverflow.com/questions/30805833/inspect-element-from-my-wpf-webbrowser-using-inspect-elementsie-chrome-fir) – user254197

답변

2

URL에 액세스하려고한다고 가정하면 물론 실패합니다. 그 URL은 전체 문서가 아니라 html의 일부분만을 반환합니다. html 태그가없고 body 태그가없고 div 태그 만 있습니다. xpath 쿼리는 아무것도 반환하지 않으므로 null 참조 예외가 발생합니다. 원하는 것을 쿼리해야합니다.

/div/center/div/table/tr[1]/td[2] 

에서 : 당신이 더 많은이 같은 쿼리를 사용하는 거라고 당신이 Pool Hashrate을 얻고 싶었다 경우

<div> 
    <center> 
     <div style="margin-right: 20px;"> 
     <h3>Personal LTC Stats</h3> 
     <table class='zebra-striped'> 
     <tr><td>Pool Hashrate: </td><td>66.896 Mh/s</td></tr> 
     <tr><td>Your Hashrate: </td><td>0 Mh/s</td></tr> 
     <tr><td>Estimated Payout: </td><td> LTC</td></tr> 
     </table> 
     </div> 
    </center> 
</div> 

,이를 감안할 때 : 그 URL을 액세스 할 때

는,이 반환 당신이해야 할 일 :

var url = "http://p2pool.org/ltcstats.php?address"; 
var web = new HtmlWeb(); 
var doc = web.Load(url); 
var xpath = "/div/center/div/table/tr[1]/td[2]"; 
var poolHashrate = doc.DocumentNode.SelectSingleNode(xpath); 
if (poolHashrate != null) 
{ 
    var hash = poolHashrate.InnerText; 
    // do stuff with hash 
} 
+0

HTML을 봅니다. 및 body 태그를 볼 때 – Harrison

+0

글쎄, 브라우저를 통해 열면 브라우저가이를 추가합니다. 사이트에 직접 액세스하여 다시 시도하십시오. –

1

문제는 xpath가 spe를 찾지 못한다는 것입니다. cified 노드. 더 작은 xpath를 갖기 위해 테이블이나 tr에 id를 지정할 수 있습니다.

또한 코드에 기반하여 단일 노드 만 찾고 있다고 가정하므로이 같은 것을 사용할 수도 있습니다

doc.DocumentNode.SelectSingleNode ("xpath"); 또 다른 좋은 옵션은

관련 문제