CefSharp 浏览器核心,爬虫
CefSharp是什么
- A framework for embedding web-browsing-like capabilities to a standard .NET application (WPF or Windows Forms).
- A set of high-level custom controls to make it reasonably easy to integrate these capabilities in your application.
- Built on top of CEF, the Chromium Embedded Framework by Marshall A. Greenblatt.
- CefSharp does little more than package CEF in a nice convenient .Net Wrapper.
- 以上是原文,其实就是一个浏览器核心,类似WebKit东西,然后可以嵌入程序中,方便咱们开发使用了
为什么用CefSharp
- CefSharp加载完成后,获取的是加载完成后的网页源代码,相当于google浏览器F12看到的源代码哦
- 这样,就不用分析对方浏览器如何加密的,获取到的数据,直接就是用户看到的最终数据
如何安装
- .net程序 右键---管理Nuget应用程序包--搜索CefSharp---安装
- 程序最低依赖是.net4.5.2
- 必须使用x86或者x64编译环境
初始化并使用
static ChromiumWebBrowser browser; var settines = new CefSettings()
{
Locale = "zh-CN",
AcceptLanguageList = "zh-CN",
MultiThreadedMessageLoop = true
}; Cef.Initialize(settines);
browser = new ChromiumWebBrowser("www.baidu.com");//指定初始化地址
this.panel1.Controls.Add(browser);
browser.Dock = DockStyle.Fill; //加载开始事件
browser.FrameLoadStart += Browser_FrameLoadStart; //加载完成后事件
browser.FrameLoadEnd += Web_FrameLoadEnd;
跳转到指定地址
browser.Load("www.qq.com");
加载完成事件
private async void Web_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
//一个网页会调用多次,需要手动自己处理逻辑
var url = e.Url;
var result = await browser.GetSourceAsync();
var html = result;
}
调用JS
browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("alert('这是c#调用的js,给文本框赋值!')"); browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('kw').value='在C#里面给页面文本框进行赋值'"); //你可以做你任何想做的事了
全部源代码
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
static ChromiumWebBrowser browser;
public Form1()
{
InitializeComponent();
DataInit();
} /// <summary>
/// 初始化
/// </summary>
public void DataInit()
{
var settines = new CefSettings()
{
Locale = "zh-CN",
AcceptLanguageList = "zh-CN",
MultiThreadedMessageLoop = true
}; Cef.Initialize(settines);
browser = new ChromiumWebBrowser("www.baidu.com");//指定初始化地址
this.panel1.Controls.Add(browser);
browser.Dock = DockStyle.Fill; //加载开始事件
browser.FrameLoadStart += Browser_FrameLoadStart; //加载完成后事件
browser.FrameLoadEnd += Web_FrameLoadEnd;
} private void Browser_FrameLoadStart(object sender, FrameLoadStartEventArgs e)
{
var url = e.Url;
} private void button1_Click(object sender, EventArgs e)
{
browser.Load(txt_Url.Text);
} private async void Web_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
//一个网页会调用多次,需要手动自己处理逻辑
var url = e.Url;
var result = await browser.GetSourceAsync();
var html = result; ////调用js
//browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("alert('这是c#调用的js,给文本框赋值!')");
////txtAccount
//browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('kw').value='在C#里面给页面文本框进行赋值'");
}
}
}
CefSharp 浏览器核心,爬虫的更多相关文章
- javascript判断浏览器核心
20 21 22 23 24 /** * 判断浏览器核心 * @return IE6.0/IE7.0/IE8.0/FireFox/Opera/other * @author ypz */ functi ...
- 修复CefSharp浏览器组件中文输入Bug
概述 最近在win10上开发wpf应用,需要将CefSharp中wpf版本的浏览器组件(版本号v51.0.0)嵌入到应用中,但是发现不支持中文输入,GitHub上有这个问题的描述,参照其提到的方法可以 ...
- CefSharp浏览器网页中文语言设置
设置浏览器语言而非cef语言 ChromiumWebBrowser browser = new ChromiumWebBrowser(url); BrowserSettings browserSett ...
- selenium:能够模拟人类打开浏览器的爬虫利器
介绍 selenium相当于是一个机器人,可以模拟人类登陆浏览器的行为,比如点击.填充数据.删除cookie等等.Chromedriver是一个驱动Chrome的程序,使用它才可以驱动浏览器,其实Ch ...
- 使用cefsharp 浏览器放大
(1)如果浏览器位置有问题,需要设置 Cef.EnableHighDPISupport(); (2)如果要放大浏览器,需要设置 browser.SetZoomLevel(1.25); Chromiu ...
- [Asp.Net Core] Blazor Server Side 扩展用途 - 配合CEF来制作带浏览器核心的客户端软件 (二) 可运行版本
前言 大概3个星期之前立项, 要做一个 CEF+Blazor+WinForms 三合一到同一个进程的客户端模板. 这个东西在五一的时候做出了原型, 然后慢慢修正, 在5天之前就上传到github了. ...
- headless webkit(无界面浏览器、爬虫)
phantomjs / puppeteer https://github.com/amir20/phantomjs-node https://github.com/GoogleChrome/puppe ...
- CefSharp.v49.0.1浏览器控件完全WPF版,实现禁止弹出新窗口,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接
需求场景:在查询页面,填写查询条件,查询条件包括上传的图片,根据图片的特征查询,这就需要在提交的时候,使用POST提交,因为GET提交无法提交图片数据,提交查询条件之后,在新的窗口展示查询结果.(当然 ...
- 基于.net开发chrome核心浏览器【四】
原文:基于.net开发chrome核心浏览器[四] 一: 上周去北京出差,给国家电网的项目做架构方案,每天都很晚睡,客户那边的副总也这样拼命工作. 累的不行了,直接导致第四篇文章没有按时发出来. 希望 ...
随机推荐
- 我的Python升级打怪之路【六】:面向对象(二)
面向对象的一些相关知识点 一.isinstance(obj,cls) 检查实例obj是否是类cls的对象 class Foo(object): pass obj = Foo() isinstance( ...
- 【wordpress】wordpress自定义主题
wordpress每个主题至少要有这两个文件 – style.css 和 index.php. index.php 告诉主题中所有的元素如何布局; style.css 则告诉主题中所有的元素该如何展示 ...
- LINQ学习(1)
LINQ LINQ,语言集成查询(Language INtegrated Query)是一组用于C#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同 ...
- C++公有继承、保护继承和私有继承
C++中的继承方式有: public.private.protected三种(它们直接影响到派生类的成员.及其对象对基类成员访问的规则). (1)public(公有继承):继承时保持基类中各成员属性不 ...
- ASP.NET能知道的东西
ASP.NET能知道的东西 获取服务器电脑名: Page.Server.ManchineName 获取用户信息: Page.User 获取客户端电脑名:Page.Request.UserHostNam ...
- VMWARE 12安装Tools
准备条件 1.yum install perl 2.yum install gcc 接着就是挂载安装 新建cdrom挂载目录mkdir /mnt/cdrom挂载光驱mount -t auto /dev ...
- [转]如何在 .Net Framework 4.0 项目上使用 OData?
本文转自:http://www.cnblogs.com/fiozhao/p/3536469.html 最新的 Microsoft ASP.NET Web API 2.1 OData 5.1.0 已只能 ...
- [转] Entity Framework添加记录时获取自增ID值
本文转自:http://blog.csdn.net/educast/article/details/8632806 与Entity Framework相伴的日子痛并快乐着.今天和大家分享一下一个快乐, ...
- 阿里云配置HTTPS
阿里云配置HTTPS 2018-05-29 16:00:56 by SemiconductorKING 最近申请域名配置了一下HTTPS协议,记录一下配置过程. 准备 备案过的域名,一个SSL证书(免 ...
- [javaEE] 三层架构案例-用户模块(二)
使用junit测试框架,测试查找用户和添加用户功能 com.tsh.test.xmlUserDaoTest package com.tsh.test; import org.junit.Test; i ...