吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6644|回复: 34
上一主题 下一主题
收起左侧

[其他转载] c#实现某市专业技术人员继续教育自动听课 过弹窗 代码片段(不提供完整源码和程序...

   关闭 [复制链接]
跳转到指定楼层
楼主
bjszz 发表于 2022-5-16 09:10 回帖奖励
进入5月各市的专业技术人员继续教育又开始了,其实课程讲的都很好,值得一听,但是总是弹出回答问题的窗口,每一个课程之间不能自动跳转,我利用c#的winform程序实现了自动切换课程和自动点回答弹窗问题,其实代码比较简单,就是利用谷歌浏览器的自动点击功能来实现的,其实其他方法也可以实现 提交post请求,分析json,都可实现,我用了一个比较懒得方法。
1、代码用到了http://chromedriver.storage.googleapis.com/index.html 谷歌浏览器的chromedriver.exe,软件根目录。
2、安装nuget包Selenium和HtmlAgilityPack,其实基本是个爬虫了。
3、这里我不适用options.AddArgument("headless");状态了,用起来比较直观。
4、建立IWebDriver实例,代码如下:
[C#] 纯文本查看 复制代码
 string get_code_url = "https://www.xxxx.com/";
                options = new ChromeOptions();
                //options.AddArgument("headless");
                options.AddArgument("no-sandbox");
                options.AddArgument("disable-dev-shm-usage");
                options.PageLoadStrategy = PageLoadStrategy.Normal;
                options.AddArgument("disable-infobars");
                options.AddArgument("user-agent='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3880.400 QQBrowser/10.8.4554.400'");
                options.AddArgument("Accept='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'");
                //driverService.HideCommandPromptWindow = true;//关闭黑色cmd窗口
                CDS = ChromeDriverService.CreateDefaultService();
                //是否应隐藏服务的命令提示符窗口
                CDS.HideCommandPromptWindow = true;
                CDS.Start();
                webDriver = new ChromeDriver(CDS, options);
                webDriver.Navigate().GoToUrl(get_code_url);

5、后面就是利用浏览器的审查元素分析xpath来进行点击了,点击代码如下
[C#] 纯文本查看 复制代码
webDriver.FindElement(By.XPath("xpath代码")).Click();

6、课程切换代码如下和点击弹窗代码如下,主要是用HtmlAgilityPack分析网页元素,找到索要点击的地方的xpath:
[C#] 纯文本查看 复制代码
 foreach (var nodee in nodes1)
                                    {
                                        webDriver.FindElement(By.XPath(nodee.XPath)).Click();

                                        var nodes2 = nodee.SelectNodes("//*[@class='sonUl width100 customScrollBar none']");
                                        foreach (var nodeb in nodes2)
                                        {
                                            var n = nodeb.SelectNodes("//*[@class='sonLi width100']");
                                            foreach (var nodec in n)
                                            {
                                                webDriver.FindElement(By.XPath(nodec.XPath)).Click();
                                                while (true)
                                                {
                                                    Thread.Sleep(60000);
                                                    var html2= webDriver.PageSource;
                                                    if (html2.Contains("课堂问答") && html2.Contains("pv-playpause pv-iconfont pv-icon-btn-play"))
                                                    {
                                                        doc1.LoadHtml(html2);

                                                        HtmlNode nodeask = doc1.GetElementbyId("ulList");
                                                        //var nodesask = nodeask.SelectNodes("//*/input[@type='radio']");
                                                        var nodesask = nodeask.SelectNodes("//*[@class='pv-ask-form']");
                                                        foreach (var ask in nodesask)
                                                        {
                                                            if (!webDriver.PageSource.Contains("课堂问答"))
                                                            {
                                                                break;
                                                            }
                                                            webDriver.FindElement(By.XPath(ask.XPath)).Click();
                                                            Thread.Sleep(1000);
                                                            doc1.LoadHtml(html2);

                                                            HtmlNode nodesub = doc1.GetElementbyId("ulList");
                                                            var nodesask1 = nodesub.SelectNodes("//*[@data-type='pvSubmit']");
                                                            foreach (var ask1 in nodesask1)
                                                            {

                                                                webDriver.FindElement(By.XPath(ask1.XPath)).Click();

                                                            }

                                                            Thread.Sleep(20000);

                                                        }
                                                        Thread.Sleep(3000);
                                                    }
                                                    else
                                                    {
                                                        var html3= webDriver.PageSource;
                                                        if (html3.Contains("pv-playpause pv-iconfont pv-icon-btn-play") && !html3.Contains("课堂问答"))
                                                        {
                                                            string a = null;
                                                            string b = null;
                                                            doc1.LoadHtml(html3);

                                                            HtmlNode nodejixu = doc1.GetElementbyId("ulList");

                                                            var nodesask2 = nodejixu.SelectNodes("//*[@class='pv-playpause pv-iconfont pv-icon-btn-play']");
                                                            var nodesj = nodejixu.SelectNodes("//*[@class='pv-time-duration']");
                                                            var nodesjs = nodejixu.SelectNodes("//*[@class='pv-time-current']");
                                                            foreach (var js in nodesjs)
                                                            {
                                                                a = js.InnerText;
                                                            }
                                                            foreach (var jj in nodesj)
                                                            {
                                                                b = jj.InnerText;
                                                            }
                                                            if (a.Equals(b)) { break; }
                                                            foreach (var ask1 in nodesask2)
                                                            {
                                                                webDriver.FindElement(By.XPath(ask1.XPath)).Click();
                                                            }
                                                        }

                                                    }
                                                }

                                            }

                                        }

                                    }

7、测试了两天,唯一的bug就是谷歌浏览器有时候崩溃,查了一下资料说谷歌浏览器有内存泄漏的问题,长时间打开会崩溃。解决办法可以使用options.AddArgument("headless");在关闭浏览器的状态下运行程序,但是有时候会不方便,如果配合winform窗体显示一下程序运行的状态就好一些了。希望和大家交流,谢谢。

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
heart8619 + 1 + 1 能否试用下?谢谢
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
caileimeng + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| bjszz 发表于 2022-5-16 09:32 |楼主
af8889 发表于 2022-5-16 09:26
有成品可以试试。

有成品,不准备提供了,自用,或者小圈子里用用就可以了,不益推广
推荐
 楼主| bjszz 发表于 2022-5-16 11:30 |楼主
gagmeng 发表于 2022-5-16 11:28
能不能分享一个框架代码,大家根据各自情况去扩展,多谢

用到的文件和nuget包,用到的函数 帖子里都写的很清楚了  用.net框架 winform就能实现
3#
af8889 发表于 2022-5-16 09:26
4#
青春作伴 发表于 2022-5-16 09:33
没有10以内的数学题填写答案?
5#
 楼主| bjszz 发表于 2022-5-16 09:36 |楼主
青春作伴 发表于 2022-5-16 09:33
没有10以内的数学题填写答案?

这个市的课程 弹窗 都是判断题,就两个答案,逻辑比较简单
6#
qqyou 发表于 2022-5-16 09:39
楼主厉害噢,那是不是不用听课了?
7#
 楼主| bjszz 发表于 2022-5-16 09:42 |楼主
qqyou 发表于 2022-5-16 09:39
楼主厉害噢,那是不是不用听课了?

不影响课程正常播放,只是自动切换课程和过弹窗,不想听可以不听
8#
黑黑黑小腾 发表于 2022-5-16 10:00
听到继教就脑瓜疼!!!
9#
zengyi2020 发表于 2022-5-16 10:07
有时候没时间看,所以挂着,这个软件还不错
10#
blywq 发表于 2022-5-16 10:18
怎样才能得到软件呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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