cgbsmy 发表于 2022-11-3 23:25

用WebView2 Cookie 签到,例“什么值得买”

DWORD WINAPI WebThreadProc(PVOID pParam)//获取网站数据线程
{
        hWeb = ::CreateDialog(hInst, MAKEINTRESOURCE(IDD_WEB), NULL, (DLGPROC)WebProc);
        ShowWindow(hWeb, SW_SHOW);
        UpdateWindow(hWeb);
        HWND hWnd = hWeb;
        HRESULT res1 = CreateCoreWebView2EnvironmentWithOptions(nullptr, nullptr, nullptr,
                Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(
                        (HRESULT result1, ICoreWebView2Environment* env1) -> HRESULT
                        {
env1->CreateCoreWebView2Controller(hWnd, Callback<ICoreWebView2CreateCoreWebView2ControllerCompletedHandler>(
                                        (HRESULT result2, ICoreWebView2Controller* controller2) -> HRESULT
                                        {
                                                if (controller2 != nullptr)
                                                {
                                                        webviewController2 = controller2;
                                                        webviewController2->get_CoreWebView2(&webviewWindow2);
                                                }
                                                ICoreWebView2Settings* Settings2;
                                                webviewWindow2->get_Settings(&Settings2);
                                                Settings2->put_IsScriptEnabled(TRUE);
                                                Settings2->put_AreDefaultScriptDialogsEnabled(TRUE);
                                                Settings2->put_IsWebMessageEnabled(TRUE);
                                                ICoreWebView2Settings4* Settings4;
                                                Settings4 = (ICoreWebView2Settings4*)Settings2;
                                                Settings4->put_IsGeneralAutofillEnabled(TRUE);
                                                Settings4->put_IsPasswordAutosaveEnabled(TRUE);
                                                RECT bounds2;
                                                GetClientRect(hWnd, &bounds2);
                                                bounds2.left = bounds2.right / 2 + 1;
                                                webviewController2->put_Bounds(bounds2);
                        WCHAR wCookie[] = L"填入Cookie";
                        SetCookie(L".smzdm.com", wCookie);
                                                webviewWindow2->add_NavigationCompleted(Callback<ICoreWebView2NavigationCompletedEventHandler>(
                                                        (ICoreWebView2* webview2, ICoreWebView2NavigationCompletedEventArgs* args2) -> HRESULT
                                                        {
                                                                wil::unique_cotaskmem_string uri;
                              webviewWindow2->get_Source(&uri);
                              if (lstrcmp(uri.get(), L"https://www.smzdm.com/") == 0)//签到
                              {
                                                                        webviewWindow2->ExecuteScript(L"$('.J_punch').trigger('click');document.getElementsByClassName(\"J_punch\").innerText;", Callback<ICoreWebView2ExecuteScriptCompletedHandler>(
                                                                                (HRESULT error2, PCWSTR result2) -> HRESULT
                                                                                {
                                          if(lstrstr(result2,L"已")==0)
                                          {
                                                MessageBox(NULL, L"Cookie已过期,请更新!", L"错误", MB_OK);
                                          }
                                                                                        return S_OK;
                                                                                }).Get());
                              }
}
                                                                return S_OK;
                                                        }).Get(), &m_navCompletedToken2);
                        webviewWindow2->Navigate(L"https://www.smzdm.com");
                                                return S_OK;                        
                                        }).Get());               
                                return S_OK;
                        }).Get());
        SetTimer(hWeb, 1, 33, NULL);

    MSG msg;
        while (GetMessage(&msg, nullptr, 0, 0))
        {
                if (!IsDialogMessage(hWeb, &msg))
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }
        }
    return 0;
}
void SetCookie(LPCWSTR uri,LPWSTR wCookie)//写入Cookie
{
        auto webview2_2 = webviewWindow2.try_query<ICoreWebView2_2>();
        ICoreWebView2CookieManager* m_cookieManager;
        webview2_2->get_CookieManager(&m_cookieManager);   
        if (m_cookieManager)
        {
      LPWSTRcStart = wCookie;
      while (cStart)
      {
            LPWSTR cValue = lstrstr(cStart, L"=");
            if (cValue > cStart && cValue != NULL)
            {
                cValue = L'\0';
                LPWSTR cName = cStart;
                cValue += 1;
                                cStart = lstrstr(cValue, L";");
                if (cStart != NULL)
                {
                  cStart = L'\0';
                  cStart += 2;
                }
                ICoreWebView2Cookie* cookie;
                m_cookieManager->CreateCookie(cName, cValue, uri, L"/", &cookie);
                m_cookieManager->AddOrUpdateCookie(cookie);
            }
            else
                cStart = NULL;
      }
        }
}

尔康大魔头 发表于 2022-11-5 17:07

一剑飘零 发表于 2022-11-4 08:41
这是纯C?调用的win的api吗?我学的C怎么还有些看不懂。"->"这个是代表的是结构体吗?膜拜大佬。

->指针调用

fuhohua 发表于 2022-11-4 09:32

一剑飘零 发表于 2022-11-4 08:41
这是纯C?调用的win的api吗?我学的C怎么还有些看不懂。"->"这个是代表的是结构体吗?膜拜大佬。

这是C++的代码

mosou 发表于 2022-11-4 07:59

这个是什么类型的代码哪种语言

一剑飘零 发表于 2022-11-4 08:38

本帖最后由 一剑飘零 于 2022-11-4 08:41 编辑

mosou 发表于 2022-11-4 07:59
这个是什么类型的代码哪种语言
C吧。我也有些看不懂。

悠扬Le逍遥 发表于 2022-11-4 08:39

很实用,解放双手

一剑飘零 发表于 2022-11-4 08:41

这是纯C?调用的win的api吗?我学的C怎么还有些看不懂。"->"这个是代表的是结构体吗?膜拜大佬。

bennyao 发表于 2022-11-4 08:53

膜拜大吊         

keview 发表于 2022-11-4 08:54

值得买仅签到没啥用,要是能自动完成日常任务才厉害

fuhohua 发表于 2022-11-4 09:31

mosou 发表于 2022-11-4 07:59
这个是什么类型的代码哪种语言

这是C++的代码

一剑飘零 发表于 2022-11-4 09:36

fuhohua 发表于 2022-11-4 09:32
这是C++的代码

你会用C写不?我只学了C。
页: [1] 2
查看完整版本: 用WebView2 Cookie 签到,例“什么值得买”