首页 > Windows开发 > 详细

C# selenium 实例-批量下载word文章

时间:2020-03-01 18:24:05      阅读:59      评论:0      收藏:0      [点我收藏+]

感悟:

1、用chrome好处之一就是:可以直接从开发工具中复制XPath,然后用在C#字符串前加上@,并将字符串当中每一个双引号都换成两个双引号即可,比较方便。

2、用selenium的好处就是在frame间切换比较方便。

场景:

我用的OA就是frame套iframe,感觉稍微难点就是frame切换,但是找到button点击就可以下载word了。

费了半天劲,虽然代码比较粗糙,但是终于可以从OA一次下载10篇文章了。

代码:

 private void 批量下载文档ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var driver = new OpenQA.Selenium.Chrome.ChromeDriver();
            driver.Navigate().GoToUrl("http://192.168.132.80/login/Login.jsp");
            driver.FindElement(By.Id("loginid")).SendKeys("用户名");
            driver.FindElement(By.Id("userpassword")).SendKeys("密码");
            driver.FindElement(By.Id("login")).Click();
            System.Threading.Thread.Sleep(1000);
            //*[@id="_ButtonCancel_0"]
            try
            {
                driver.FindElement(By.XPath(@"//*[@id=""_ButtonCancel_0""]")).Click();
            }
            catch { }
            //主页 流程 
            driver.FindElement(By.XPath(@"//*[@id=""head""]/tbody/tr/td[2]/table/tbody/tr/td/div/div[1]/div[4]")).Click();
            System.Threading.Thread.Sleep(3000);
            //左侧已办 //*[@id="drillmenu"]/ul/li[3]/a
            driver.FindElement(By.XPath(@"//*[@id=""drillmenu""]/ul/li[3]")).Click();
            //进入frame1  mainFrame  /html/body/table/tbody/tr[2]/td[2]/table/tbody/tr[1]/td/table/tbody/tr[2]/td[1]/table/tbody/tr/td/div[3]/ul/li[7]
            driver.SwitchTo().Frame("mainFrame");
            System.Threading.Thread.Sleep(3000);
            ReadOnlyCollection<IWebElement> anchors = driver.FindElements(By.XPath(@"//a"));
            foreach (IWebElement a in anchors)
            {
                if (a.Text.Contains("XX审批流程"))
                {
                    a.Click();
                    break;
                }
            }
            System.Threading.Thread.Sleep(3000);
            ////*[@id="_xTable"]/div[1]/div[2]/table/tbody/tr[1]/td[6]/a
            ReadOnlyCollection<IWebElement> oo = driver.FindElements(By.XPath("//a[contains(@href,‘javaScript:openFullWindowHaveBarForWFList‘)]"));
            for (int i = 0; i <oo.Count; i++)              
            {
                //循环后切回当前document
                driver.SwitchTo().Window(driver.WindowHandles[0]);
                driver.SwitchTo().Frame("mainFrame");
                //开新窗口1
                oo[i].Click();
                System.Threading.Thread.Sleep(1000);
                int j = i + 1;
                //切换到新窗口
                driver.SwitchTo().Window(driver.WindowHandles[1]);
                System.Threading.Thread.Sleep(2000);
                //还有bodyiframe
                driver.SwitchTo().Frame("bodyiframe");
                //下载按钮 //*[@id="selectDownload"]/nobr/button
                // driver.FindElement(By.XPath(@"//button[@class=""btnFlowd""]")).Click();
                driver.FindElement(By.TagName(@"button")).Click();
                System.Threading.Thread.Sleep(2000);
                driver.Close();
            }
                     
            System.Threading.Thread.Sleep(8000);

            driver.Quit();//在完成操作后,同时关闭浏览器窗口和Weddriver会话
        }

 

C# selenium 实例-批量下载word文章

原文:https://www.cnblogs.com/pu369/p/12390920.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!