http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 55876|回复: 49

[教程] 根据传入的JS方法名和参数执行JavaScript

[复制链接]
发表于 2014-9-17 09:46:07 | 显示全部楼层 |阅读模式
导读部分

【HttpHelper万能框架】教程目录贴  http://www.sufeinet.com/thread-9989-1-1.html
【HttpHelper万能框架】源码购买帖  http://www.sufeinet.com/thread-9926-1-1.html

教程部分


执行JS一直是网络抓取的难题,或者是说可以难倒一部分用户的难题,今天我在万能框架中提供一个简单的执行JS方法
可以直接调用一段JS代码中的方法,或者是直接执行一段JS代码。

我实现的是Js的Eval方法,这个方法我相信懂JS的人都知道一点,他是用来动态执行JS代码的,大家想一下如果我在C#中实现这个方法,是不是就会很方便的来使用C#执行JS了。
我只想说必须的。

下面看方法签名
[C#] 纯文本查看 复制代码
  /// <summary>
        /// 直接调用JS方法并获取返回的值
        /// </summary>
        /// <param name="strJs">要执行的JS代码</param>
        /// <param name="main">要调用的方法名</param>
        /// <returns>执行结果</returns>
        public static string JavaScriptEval(string strJs, string main)


调用方法,下面我 先给出一个简单的JS文件
[C#] 纯文本查看 复制代码

function main1() {

    return 1 + 1;
}

function main2(n) {

    return 1 + n;
}



下面是调用方法和用例大家请看代码
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using CsharpHttpHelper;

namespace CsharpHttpHelper_Demo
{
    public partial class HttpJs_Demo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            string strjs = string.Empty;
            using (StreamReader sr = new StreamReader(Server.MapPath("test.js")))
            {
                strjs = sr.ReadToEnd();
            }

            //调用不带参数的方法
            string main1 = HttpHelper.JavaScriptEval(strjs, "main1()");

            //调用带参数的方法
            string main2 = HttpHelper.JavaScriptEval(strjs, "main2(25)");

            //直接执行JS代码
            string jiafa = HttpHelper.JavaScriptEval(string.Empty, "25+1+4");

            //直接执行JS代码
            string time = HttpHelper.JavaScriptEval(string.Empty, " new Date().toString()");
        }
    }
}

效果如下
QQ截图20140917093856.jpg
好了,我相信有了这个方法能帮助大家解决很多问题。
更强大的功能我会一直研究,等有了成果我会第一时间加入万能框架,分享给大家使用。
这个功能将在25号左右的更新中出现。
小伙伴们有什么想法可以提提建议




1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2014-11-3 08:04:04 | 显示全部楼层
shensi88 发表于 2014-11-2 21:00
[mw_shl_code=csharp,true]检索 COM 类工厂中 CLSID 为 {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} 的组件失 ...

这个问题是在什么时候报的
 楼主| 发表于 2015-1-7 12:16:48 | 显示全部楼层
我是MT 发表于 2015-1-7 02:32
老大,你这个test.js放在exe同目录下面的吗,还有这个东西要在main入口执行的吧。这个demo不知道如何运行呢 ...

在那里执行都行,主要是调用方法,这个在源码的Web页面里有啊你看代码上有贴的文件名
 楼主| 发表于 2015-1-14 08:22:22 | 显示全部楼层
howzew 发表于 2015-1-14 00:30
这个方法在winform中可以使用么

可以
 楼主| 发表于 2015-1-17 09:21:08 | 显示全部楼层
我是MT 发表于 2015-1-16 22:53
测试js的时候我直接把文件放在桌面的。如果是生成exe文件,我想把这个JS放到C#里面作为资源文件来引 ...

资源文件也是一个类,直接使用类.你的资源名就行了,
 楼主| 发表于 2015-1-19 14:37:55 | 显示全部楼层
我是MT 发表于 2015-1-19 14:36
建议苏飞把正则匹配这里 防止程序假死搞一下。try catch 。匹配到了就返回ture,没有匹配到返回false。

你说的那个正则啊
 楼主| 发表于 2015-4-19 13:57:32 | 显示全部楼层
1790968956 发表于 2015-4-19 12:20
HttpHelper.JavaScriptEval 这方法我为什么掉不到?

这是万能框架http://httphelper.sufeinet.com的方法,Httphelper里没有
 楼主| 发表于 2015-5-26 08:01:56 | 显示全部楼层
a896351151 发表于 2015-5-25 22:10
看不懂
可以标注下哪些是必须项呢
是不是只要这些段代码就可以吗

//调用不带参数的方法
            string main1 = HttpHelper.JavaScriptEval(strjs, "main1()");

strjs是JS字符串
main1()是要调用的方法
 楼主| 发表于 2017-3-23 10:59:14 | 显示全部楼层
这个具体问题具体分析吧,原则上是没有长度限制
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-27 12:20

© 2014-2021

快速回复 返回顶部 返回列表