首先我自己写了个方法来解析HTML的JSpublic virtual string GetScriptAnalysisHtml(string html)
{
string result = string.Empty;
try
{ HTMLDocumentClass doc = new HTMLDocumentClass();
IHTMLDocument2 hc = doc;
hc.write(html);
hc.close();
doc = (HTMLDocumentClass)hc;
result = doc.documentElement.innerHTML;
hc.close();
doc.close();
}
catch (Exception exp)
{
} return result;
}
但效果不理想, JS函数定义在页面里可以解析,但是如果JS是单独文件就无法解析了
为描述得更清楚我下具体描述一下
不要说用HttpWebRequest<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>test </title>
<script src="http://localhost/js/a.js" type="text/javascript" ></script>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="robots" content="index,follow">
</head>
<body >
<script type="text/javascript">
function myfun()
{
document.write("out textout textout textout text <a href='http://www.baidu.com'> click here</a>");
myfun2();
}
myfun();
</script>
<iframe src="http://www.google.cn/" ></iframe>
</body>
</html>我打个比方 HttpWebRequest 和Webbrowser出来的效果绝对不一样
这段HTML网页代码 如果用
HttpWebRequest 取出来 就跟这个网页代码一样一样,肯定不是我想要的,我想要的是被解析过后的 文档对象,
用webbroser取出来的结果是
<HEAD><TITLE>test</TITLE>
<SCRIPT src="http://localhost/js/a.js" type=text/javascript></SCRIPT><META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content=index,follow name=robots></HEAD>
<BODY>
<SCRIPT type=text/javascript>
function myfun()
{
document.write("out textout textout textout text <a href='http://www.baidu.com'> click here</a>");
myfun2();
}
myfun();
</SCRIPT>
out textout textout textout text <A href="http://www.baidu.com">click here</A> out textout textout textout text <A href="http://www.baidu.com">click here</A>call myfun2 out text this <IFRAME src="http://www.google.cn/"></IFRAME></BODY>这是我想要的结果 :JS方法myfun 和myfun2两个方法都已经被解析了(myfun2定义在JS文件里)
而我用自己定义的 GetScriptAnalysisHtml 函数解析结果为 <HEAD><TITLE>test</TITLE>
<SCRIPT src="http://localhost/js/a.js" type=text/javascript></SCRIPT><META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content=index,follow name=robots></HEAD>
<BODY>
<SCRIPT type=text/javascript>
function myfun()
{
document.write("out textout textout textout text <a href='http://www.baidu.com'> click here</a>");
myfun2();
}
myfun();
</SCRIPT>
out textout textout textout text <A href="http://www.baidu.com">click here</A> <IFRAME src="http://www.google.cn/"></IFRAME></BODY>结果正确了一半 看到没有 js代码定义在页面上的被成功解析,但JS代码定义在单独js文件里的没有被成功解析(即不会去下载JS文件解析)
需求,我现在想改写GetScriptAnalysisHtml 方法使它能够做到和webbrowser一样的解析效果(即可以去下载JS文件定义的函数再解析)
这就是我的需求 另外不要再说直接用webbrowser控件,我的程序是服务方式运行webbrowser必须要有窗口句柄不然会报错,如果有人看明白了我的问题,你已经算半个高手了,如果有人解答我的问题那就是高手中的高手
{
string result = string.Empty;
try
{ HTMLDocumentClass doc = new HTMLDocumentClass();
IHTMLDocument2 hc = doc;
hc.write(html);
hc.close();
doc = (HTMLDocumentClass)hc;
result = doc.documentElement.innerHTML;
hc.close();
doc.close();
}
catch (Exception exp)
{
} return result;
}
但效果不理想, JS函数定义在页面里可以解析,但是如果JS是单独文件就无法解析了
为描述得更清楚我下具体描述一下
不要说用HttpWebRequest<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>test </title>
<script src="http://localhost/js/a.js" type="text/javascript" ></script>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="robots" content="index,follow">
</head>
<body >
<script type="text/javascript">
function myfun()
{
document.write("out textout textout textout text <a href='http://www.baidu.com'> click here</a>");
myfun2();
}
myfun();
</script>
<iframe src="http://www.google.cn/" ></iframe>
</body>
</html>我打个比方 HttpWebRequest 和Webbrowser出来的效果绝对不一样
这段HTML网页代码 如果用
HttpWebRequest 取出来 就跟这个网页代码一样一样,肯定不是我想要的,我想要的是被解析过后的 文档对象,
用webbroser取出来的结果是
<HEAD><TITLE>test</TITLE>
<SCRIPT src="http://localhost/js/a.js" type=text/javascript></SCRIPT><META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content=index,follow name=robots></HEAD>
<BODY>
<SCRIPT type=text/javascript>
function myfun()
{
document.write("out textout textout textout text <a href='http://www.baidu.com'> click here</a>");
myfun2();
}
myfun();
</SCRIPT>
out textout textout textout text <A href="http://www.baidu.com">click here</A> out textout textout textout text <A href="http://www.baidu.com">click here</A>call myfun2 out text this <IFRAME src="http://www.google.cn/"></IFRAME></BODY>这是我想要的结果 :JS方法myfun 和myfun2两个方法都已经被解析了(myfun2定义在JS文件里)
而我用自己定义的 GetScriptAnalysisHtml 函数解析结果为 <HEAD><TITLE>test</TITLE>
<SCRIPT src="http://localhost/js/a.js" type=text/javascript></SCRIPT><META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content=index,follow name=robots></HEAD>
<BODY>
<SCRIPT type=text/javascript>
function myfun()
{
document.write("out textout textout textout text <a href='http://www.baidu.com'> click here</a>");
myfun2();
}
myfun();
</SCRIPT>
out textout textout textout text <A href="http://www.baidu.com">click here</A> <IFRAME src="http://www.google.cn/"></IFRAME></BODY>结果正确了一半 看到没有 js代码定义在页面上的被成功解析,但JS代码定义在单独js文件里的没有被成功解析(即不会去下载JS文件解析)
需求,我现在想改写GetScriptAnalysisHtml 方法使它能够做到和webbrowser一样的解析效果(即可以去下载JS文件定义的函数再解析)
这就是我的需求 另外不要再说直接用webbrowser控件,我的程序是服务方式运行webbrowser必须要有窗口句柄不然会报错,如果有人看明白了我的问题,你已经算半个高手了,如果有人解答我的问题那就是高手中的高手
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
JS是客户端的代码,或许它通过了ajax返回到了服务器端,但其核心还是跟服务器交互的内容。
我想你只要搞通它是怎样通过ajax调用服务器端,就可以直接用代码仿真出它的JS操作。
一个笨方法:分三个阶段处理。
第一步,读取html内容,发现有引入js文件的,<script src= 就下载js文件,然后把内容加到html中单独的一段。并去掉这段引入文件的代码。就是把引入js文件,变成嵌入js代码。
第二步,按照你现在解析方法,应该能生成正确的执行后的html。
第三步,从生成的html中,把第一步程序嵌入的js代码,还原成引入js文件方式。
也不知道执行了什么东西
也不知道执行了什么东西
看有没有用,我没试...