SimpleBrowser 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
SimpleBrowser 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议: BSD
开发语言: .NET 查看源码 »
操作系统: 跨平台
收录时间: 2016-07-27

SimpleBrowser是专门为自动化任务而设计的一个灵活而直观的浏览器引擎,内置.Net 4 framework

示例代码:

class Program
{
    static void Main(string[] args)
    {
        var browser = new Browser();
        try
        {
            // log the browser request/response data to files so we can interrogate them in case of an issue with our scraping
            browser.RequestLogged += OnBrowserRequestLogged;
            browser.MessageLogged += new Action<Browser, string>(OnBrowserMessageLogged);

            // we'll fake the user agent for websites that alter their content for unrecognised browsers
            browser.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10";

            // browse to GitHub
            browser.Navigate("http://github.com/");
            if(LastRequestFailed(browser)) return; // always check the last request in case the page failed to load

            // click the login link and click it
            browser.Log("First we need to log in, so browse to the login page, fill in the login details and submit the form.");
            var loginLink = browser.Find("a", FindBy.Text, "Login");
            if(!loginLink.Exists)
                browser.Log("Can't find the login link! Perhaps the site is down for maintenance?");
            else
            {
                loginLink.Click();
                if(LastRequestFailed(browser)) return;

                // fill in the form and click the login button - the fields are easy to locate because they have ID attributes
                browser.Find("login_field").Value = "youremail@domain.com";
                browser.Find("password").Value = "yourpassword";
                browser.Find(ElementType.Button, "name", "commit").Click();
                if(LastRequestFailed(browser)) return;

                // see if the login succeeded - ContainsText() is very forgiving, so don't worry about whitespace, casing, html tags separating the text, etc.
                if(browser.ContainsText("Incorrect login or password"))
                {
                    browser.Log("Login failed!", LogMessageType.Error);
                }
                else
                {
                    // After logging in, we should check that the page contains elements that we recognise
                    if(!browser.ContainsText("Your Repositories"))
                        browser.Log("There wasn't the usual login failure message, but the text we normally expect isn't present on the page");
                    else
                    {
                        browser.Log("Your News Feed:");
                        // we can use simple jquery selectors, though advanced selectors are yet to be implemented
                        foreach(var item in browser.Select("div.news .title"))
                            browser.Log("* " + item.Value);
                    }
                }
            }
        }
        catch(Exception ex)
        {
            browser.Log(ex.Message, LogMessageType.Error);
            browser.Log(ex.StackTrace, LogMessageType.StackTrace);
        }
        finally
        {
            var path = WriteFile("log-" + DateTime.UtcNow.Ticks + ".html", browser.RenderHtmlLogFile("SimpleBrowser Sample - Request Log"));
            Process.Start(path);
        }
    }

    static bool LastRequestFailed(Browser browser)
    {
        if(browser.LastWebException != null)
        {
            browser.Log("There was an error loading the page: " + browser.LastWebException.Message);
            return true;
        }
        return false;
    }

    static void OnBrowserMessageLogged(Browser browser, string log)
    {
        Console.WriteLine(log);
    }

    static void OnBrowserRequestLogged(Browser req, HttpRequestLog log)
    {
        Console.WriteLine(" -> " + log.Method + " request to " + log.Url);
        Console.WriteLine(" <- Response status code: " + log.ResponseCode);
    }

    static string WriteFile(string filename, string text)
    {
        var dir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs"));
        if(!dir.Exists) dir.Create();
        var path = Path.Combine(dir.FullName, filename);
        File.WriteAllText(path, text);
        return path;
    }
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

SimpleBrowser 的相关资讯

还没有任何资讯

SimpleBrowser 的相关博客

Scala - Modular programming using Objects

Up to now, all the pages has discuseed programming in the small, and from this page, we will discuss program in the l...

无需图形界面环境下的浏览器项目一览表

本表几乎列出了所有无需图形界面环境下的浏览器开源项目,可用于自动化、测试或者其他用途。 软件名 介绍 支持语言 Awesomiu...

Delphi使用CEF4Delphi制作Chromium谷歌内核浏览器

什么是CEF4Delphi? CEF4Delphi是由Salvador Díaz Fau创建的一个开源项目,用于在基于Delphi或Lazarus/FPC的应用程序中嵌入基...

Android 自己收集的开源项目集合(持续更新 2018.2.5)

2017.12.21 1.仿QQ说说发图片选择框架 https://github.com/yaozs/ImageShowPicker 2.炫酷开屏动画框架 https://github.com/J...

PuppeteerSharp+AngleSharp的爬虫实战之汽车之家数据抓取

参考了DotNetSpider示例, 感觉DotNetSpider太重了,它是一个比较完整的爬虫框架。 对比了以下各种无头浏览器,最终采用Puppe...

【自动化测试】无需图形界面环境下的浏览器开源项目

大公司一般都会做自动化覆盖测试,会用到不需要节目的浏览器环境,下面有一些开源工具有时间尝试下 软件名 介绍 支持语言 Aw...

【转】Android 自己收集的开源项目和文章集合(持续更新至2018.12.17)

2017-12-21 1.炫酷开屏动画框架 https://github.com/JoshuaRogue/FancyView 2.防京东,支付宝密码键盘和密码输入框 https://...

SimpleBrowser 的相关问答

还没有任何问答,马上提问

评论 (0)

加载中
更多评论
0 评论
11 收藏
分享
返回顶部
顶部