Stream kỹ thuật C# .Net

Stream kỹ thuật ngắn cơ bản đến nâng cao C# .Net

CefSharp trên WPF C# - [Stream kỹ thuật] CefSharp trên WPF C# - [Stream kỹ thuật] CefSharp trên WPF C# - [Stream kỹ thuật] CefSharp trên WPF C# - [Stream kỹ thuật] CefSharp trên WPF C# - [Stream kỹ thuật] 0/5 (12 reviews)

CefSharp trên WPF C# - [Stream kỹ thuật]

Đã đăng 2017-01-13 23:56:01 bởi HowKteam
19 bình luận 20601 lượt xem
CefSharp trên WPF C# - [Stream kỹ thuật] 0 /5 stars (2 reviews)
 

Nếu bạn có nhu cầu thao tác tự động với website. Mà không muốn dùng cách tà đạo. Sao không thử sử dụng trình duyệt web chrome được tạo ra cho dân developer. 

Cùng tìm hiểu cách sử dụng CefSharp trên WPF nhé

Code MainWindow.xaml

<Window x:Class="CefSharp___WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:CefSharp___WPF"
        mc:Ignorable="d"
        xmlns:cef="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
        Loaded="Window_Loaded"
        Title="MainWindow" Height="550" Width="980">
    <DockPanel>
        <TextBox x:Name="txbID" DockPanel.Dock="Top"></TextBox>
        <Button DockPanel.Dock="Top" Content="Close" Click="Button_Click"></Button>
        <Button DockPanel.Dock="Top" Content="Show" Click="Button_Click_1"></Button>
        <cef:ChromiumWebBrowser x:Name="web"></cef:ChromiumWebBrowser>
    </DockPanel>
</Window>

Code MainWindow.xaml

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using CefSharp;

namespace CefSharp___WPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        CookieVisitor cookie = new CookieVisitor();
        public MainWindow()
        {
            InitializeComponent();            
        }

        void ExecuteScript(string script)
        {
            web.EvaluateScriptAsync(script);
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            web.Load("http://www.howkteam.com/");
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //string script = string.Format("document.getElementsByClassName('{0}')[0].click();", txbID.Text);
            //ExecuteScript(script);

            MessageBox.Show(web.Address);
        }

        string GetHTML(string id)
        {
            string script = string.Format("var a = document.getElementById('{0}').innerHTML; document.cookie = 'howkteam = ' + a; alert(a);", id);
            ExecuteScript(script);

            try
            {
                Cef.GetGlobalCookieManager().VisitAllCookies(cookie);
                foreach (var item in cookie.AllCookies)
                {
                    MessageBox.Show(item.Key + " \\ " + item.Value);
                }
            }
            catch { }

            return "";
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(GetHTML(txbID.Text));
        }
    }

    public class CookieVisitor : ICookieVisitor
    {
        public CookieVisitor()
        {
            IsReady = true;
        }
        public bool Visit(Cookie cookie, int count, int total, ref bool deleteCookie)
        {
            lock (this)
            {
                if (_cookies.ContainsKey(cookie.Name))
                {
                    _cookies[cookie.Name] = new System.Net.Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain);
                    _cookies[cookie.Name].Name = cookie.Name;
                    _cookies[cookie.Name].Value = cookie.Value;
                    _cookies[cookie.Name].Path = cookie.Path;
                    _cookies[cookie.Name].Domain = cookie.Domain;
                }
                else _cookies.Add(cookie.Name, new System.Net.Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain));
                //fire when complete
                IsReady = count == total - 1;   //
            }
            return true;
        }

        public void Dispose()
        {

        }

        Dictionary<string, System.Net.Cookie> _cookies = new Dictionary<string, System.Net.Cookie>();
        public Dictionary<string, System.Net.Cookie> AllCookies { get { return _cookies; } }
        public bool IsReady { get; set; }
        public System.Net.Cookie this[string name]
        {
            get { return _cookies.ContainsKey(name) ? _cookies[name] : null; }
        }
        ~CookieVisitor()
        {
        }
    }
}

Project

Hãy khoe thành quả của mình ngay phần bình luận nhé.

Đừng quên “Luyện tập – Thử thách – Không ngại khó”.

Chia sẻ:
Thảo luận Hỏi và đáp Báo lỗi bài viết
Hủy bỏ   hoặc  
CefSharp trên WPF C# - [Stream kỹ thuật]
phutucthinh0 2017-09-01 15:04:00

Em mới tham khảo được cách lấy element bằng cách dùng trực tiếp cefsharp, không biết vậy có được không ? (Mọi người xem giùm ạ :)));

Em sử dụng trên trang howkteam

string script = string.Format("document.getElementsByClassName('btn btn-warning')[0].value;"); //em lấy giá trị của nút "giới thiệu"
                web.EvaluateScriptAsync(script).ContinueWith(x =>
                {
                    var response = x.Result;

                    if (response.Success && response.Result != null)
                    {
                        var startDate = response.Result;
                        string a = Convert.ToString(startDate);

// a chính là giá trị của ElementsByClassName('btn btn-warning')[0].

                        // xuất ra thông báo để kiểm tra thôi ạ
                        string alerts = "alert('" + a + "');"; 
                        web.EvaluateScriptAsync(alerts);
                    }

1 bình chọn
Reply
CefSharp trên WPF C# - [Stream kỹ thuật]
phutucthinh0 2017-08-11 09:37:56

Anh ơi cho em hỏi tí ạ ?

Khi dùng  web.EvaluateScriptAsync(script); mà trang web chưa load thì nó báo lỗi ạ. Cụ thể là :

MainWindow.xaml.cs

namespace Googlebrowser
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
           // App.Current.MainWindow.Hide();
            InitializeComponent();   
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            web.Load("http://mmoity.com/12A5");
            string script = "setTimeout(function(){document.getElementById('skip_ad_button').click();},40000);";
            web.EvaluateScriptAsync(script);

        }
    }
}

Nó báo lội chỗ in đậm ấy anh, giờ mình xử lí sao ạ ?

0 bình chọn
Reply
View all 4 comments
Kteam - Howkteam Free Education
phutucthinh0 2017-08-11 09:39:40
Nó báo vậy nè ? System.Exception occurred HResult=0x80131500 Message=Unable to execute javascript at this time, scripts can only be executed within a V8Context.Use the IWebBrowser.CanExecuteJavascriptInMainFrame property to guard against this exception.See https://github.com/cefsharp/CefSharp/wiki/General-Usage#when-can-i-start-executing-javascript for more details on when you can execute javascript. Source=CefSharp StackTrace: at CefSharp.WebBrowserExtensions.EvaluateScriptAsync(IWebBrowser browser, String script, Nullable`1 timeout) at Googlebrowser.MainWindow.Window_Loaded(Object sender, RoutedEventArgs e) in C:\Users\phutu\Documents\Visual Studio 2017\Projects\Googlebrowser\Googlebrowser\MainWindow.xaml.cs:line 34 at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args) at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e) at System.Windows.BroadcastEventHelper.BroadcastEvent(DependencyObject root, RoutedEvent routedEvent) at System.Windows.BroadcastEventHelper.BroadcastLoadedEvent(Object root) at MS.Internal.LoadedOrUnloadedOperation.DoWork() at System.Windows.Media.MediaContext.FireLoadedPendingCallbacks() at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks() at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget) at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget) at System.Windows.Media.MediaContext.Resize(ICompositionTarget resizedCompositionTarget) at System.Windows.Interop.HwndTarget.OnResize() at System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wparam, IntPtr lparam) at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp; handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp; handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
0 bình chọn
Reply
Kteam - Howkteam Free Education
K9 2017-08-11 12:21:34
Do cái page chưa load xong nên k chạy script được đó bạn
0 bình chọn
Reply
Kteam - Howkteam Free Education
phutucthinh0 2017-08-11 12:24:13
Dạ vậy mình xử lí sao ạ?. Em cám ơn ạ!
0 bình chọn
Reply
Kteam - Howkteam Free Education
K9 2017-08-11 12:26:37
đợi nó load xong. có event status changed đó bạn
0 bình chọn
Reply
CefSharp trên WPF C# - [Stream kỹ thuật]
caovy2001 2017-07-17 12:00:42

Anh làm CefSharp trên Winform đi anh!!

1 bình chọn
Reply
CefSharp trên WPF C# - [Stream kỹ thuật]
msi.official.vn 2017-01-14 00:53:57
Hôm sau a ngâm thử api của google drive đi a
0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
K9 2017-01-14 00:54:23
ok e để a ngâm rồi stream nha
0 bình chọn
Reply
CefSharp trên WPF C# - [Stream kỹ thuật]
anhnd 2017-01-14 00:46:56
Em muốn set time out khoảng 5 phút 1 lần reset thì làm sao anh?
0 bình chọn
Reply
View all 2 comments
Kteam - Howkteam Free Education
K9 2017-01-14 00:48:47
http://stackoverflow.com/questions/13154552/javascript-set-cookie-with-expire-time
0 bình chọn
Reply
Kteam - Howkteam Free Education
K9 2017-01-14 00:48:59
function display() { var now = new Date(); var time = now.getTime(); var expireTime = time &#43; 1000*36000; now.setTime(expireTime); var tempExp = 'Wed, 31 Oct 2012 08:50:17 GMT'; document.cookie = 'cookie=ok;expires='&#43;now.toGMTString()&#43;';path=/'; //console.log(document.cookie); }
0 bình chọn
Reply
CefSharp trên WPF C# - [Stream kỹ thuật]
anhnd 2017-01-14 00:45:25
Anh ơi, cookie có time out không?
0 bình chọn
Reply
CefSharp trên WPF C# - [Stream kỹ thuật]
anhnd 2017-01-14 00:35:32
Cookie có yếu điểm là nếu use hoặc phần mềm có cơ chế chặn là vô dụng luôn.
0 bình chọn
Reply
CefSharp trên WPF C# - [Stream kỹ thuật]
anhnd 2017-01-14 00:25:53
Khó thế
0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
Kteam 2017-01-14 00:34:19
chỉ cần biết về C# và tí về JS là đc rồi mà bạn :)
0 bình chọn
Reply
CefSharp trên WPF C# - [Stream kỹ thuật]
꧁༒Hell Demons༒꧂ 2017-01-14 00:03:51
test comment
0 bình chọn
Reply
View all 2 comments
Kteam - Howkteam Free Education
꧁༒Hell Demons༒꧂ 2017-01-14 00:04:01
test comment
0 bình chọn
Reply
Kteam - Howkteam Free Education
Kteam 2017-01-14 00:05:25
chức năng chưa hoàn thiện đâu :v
0 bình chọn
Reply
Hủy bỏ   hoặc  
Hủy bỏ   hoặc  

Chiến dịch

Kteam - Howkteam Free Education