读取HTML”;窗口;值
本文关键字:窗口 HTML 读取 | 更新日期: 2023-09-27 18:20:21
我想从wp8上的web浏览器控件中加载的网站中读取一些变量。我对HTML脚本不是很安全。所以我真的不确定"webBrowser.InvokeScript"或其他什么是否可能。
网站看起来像这样:
<html class="no-js mobile">
<head><script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script>
<title>test</title><meta content="width=320, initial-scale=1.0, user-scalable=no" name="viewport">
<script>
//<![CDATA[
window.current_ip = '31.17.30.54';
//]]>
</script>
<script>
//<![CDATA[
window.current_checkout = "{"id":0,"domestic":false,"amount":0.0,"updated_at":0,"created_at":0}";
//]]>
</script>
<script type="text/javascript">
var _sift = _sift || [];
_sift.push(['_setAccount', '637102']);
_sift.push(['_setUserId', '1878617619']);
_sift.push(['_trackPageview']);
(function() {
function loadSift() {
var sift = document.createElement('script');
sift.type = 'text/javascript';
sift.async = true;
sift.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'dtlilztwypawv.cloudfront.net/s.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(sift, s);
}
if (window.attachEvent) {
window.attachEvent('onload', loadSift);
} else {
window.addEventListener('load', loadSift, false);
}
})();
</script>
</head>
如果有人能拦住我,我会很高兴的!
编辑------------------
我想我离解决问题又近了一步。我成功地运行了这个代码:
webBrowser.InvokeScript("eval", "newfunc_getmyvalue = function() { return 'hello'; }");
string s1 = (string)webBrowser.InvokeScript("newfunc_getmyvalue");
我现在只需要知道"window.current_checkout=…"到底是怎么做的?它真的设置了一个变量吗?我如何修改"hello"脚本以返回此值?
若要从调用的脚本中获取返回值,它必须调用windows.external.notify(),并且WebBrowser控件必须声明ScriptNotify事件处理程序来捕获数据(在e.value中)。
所以这个:
webBrowser.InvokeScript("eval", "window.external.notify(window.current_checkout);");
应该从网页中发出值,并且
private void webBrowser_ScriptNotify(object sender, NotifyEventArgs e)
{
string response = e.Value;
// do something wonderful with response
}
应该在你的应用程序中捕获它。
您可以使用HtmlAgilityPack
库来解析html,然后使用xpath或linq-xml来查找变量。使用webclient
下载html,然后使用库进行解析。还有其他下载html的方法。