• C#爬虫之Senlium


    在爬虫过程中,有的网页是动态更新的,有的数据会在页面加载时通过js加载或者用ajax加载,这时候如果只用普通的Request和Response获取的HTML页面将会不完整。所以这时候可以采用Senlium.

    Selenium 是用于Web应用程序自动化测试的开源工具。通过Selenium,你可以模拟用户在浏览器中的操作。

    Selenium可以模拟多种浏览器,目前主流是IE、Chrome、FireFox。这里我采用的Chrome浏览器。

    首先在VS使用NuGet安装

     

    然后使用Chrome浏览器则安装

     

    安装完后在解决方案目录下的packagesSelenium.Chrome.WebDriver.2.42driver中找到chromedriver.exe放到Bin的目录中。

    之后引用命名空间:在Selenium之前都得加OpenQA,例如:

           Using OpenQA.Selenium;

           首先模拟打开浏览器:

             Var driver=new ChromeDriver();

             driver.Manage().Window.Maximize();

             driver.Navigate().GoToUrl("URL");

           这时候谷歌浏览器则会弹出一个界面。

    具体API可以详看:

    https://seleniumhq.github.io/selenium/docs/api/dotnet/

    一些小贴示:

    1、 一般查找使用FindElement(By.---()),若找不到可以设置等待时间等待页面加载

    2、 如果页面需要在新的标签页打开窗口,则可以用JS脚本例如

      string js = string.Format("window.open("{0}")", downLoad);

      driver.ExecuteScript(js);

    3、 页面中有的元素是在IFrame中,如果不先找到IFrame,则不会找到里面的属性,所以可以先用

      driver.SwitchTo().Frame(str)

    4、 有时候我们需要等待浏览器加载则可以设置timeouts,Selenium有三种超时等待方式:

      1)、显式等待

      显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.

      需要用到WebDriverWait

      2)、隐式等待

      隐式等待, 此处的隐式等待是针对Driver 每次执行命令的最长执行时间也可以理解为超时时间,一些人对此处有误解,认为是让Driver等一段时间,确实某些时候能让Driver等一段时间, 但是影响是全局的,每次Driver执行找不到元素都会等待此处设置的时间,假设某处将此值设置的太长,必须在执行完成之后还原回来,否则判断一个元素是否存在的时候,就会遇到很坑爹的问题。

      改进后的方法如下:WebDriver会进行一个隐式等待,但参数只有时间,这就导致我需要什么元素出现,我不一定能等到它        

         driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10000);

      3)、线程休眠

           Thread.Sleep();

    5.如果切换不同标签可以需要用到句柄例如:能够跳到第一个标签页

      ReadOnlyCollection<string> windowsHandles = driver.WindowHandles;

           driver.SwitchTo().Window(windowsHandles[0]);

     6.如果需要打开新的标签页可以使用浏览器执行JS

      string js = "window.open("http://baidu.com");";
      driver.ExecuteScript(js);
  • 相关阅读:
    洛谷P4172 [WC2006]水管局长(lct求动态最小生成树)
    洛谷P1501 [国家集训队]Tree II(打标记lct)
    洛谷P2173 [ZJOI2012]网络(10棵lct与瞎jb暴力)
    [Asp.net 5] Localization-resx资源文件的管理
    [Asp.net 5] Localization-简单易用的本地化-全球化信息
    [Asp.net 5] Configuration-新一代的配置文件
    [Asp.net 5] Configuration-新一代的配置文件(ConfigurationSource的多种实现)
    [Asp.net 5] Configuration-新一代的配置文件(神奇的Binder)
    [Asp.net 5] Configuration-新一代的配置文件(接口定义与基础实现)
    [Asp.net 5] DependencyInjection项目代码分析-目录
  • 原文地址:https://www.cnblogs.com/dlvguo/p/9801506.html
Copyright © 2020-2023  润新知