Selenium 4 中加入了对新版 Chromium Edge 的支持,但其仍处于 alpha 阶段,没有正式发布

如果使用最新稳定版的 Selenium 操作 Chromium Edge,则需要一些其他的操作

环境

  • Windows 1909
    • macOS 和 Linux 的使用方式相同
  • dotnet core 3.1
    • 其他语言可能有其他方法
  • Microsoft Edge (Chromium)
  • Edge Webdriver

参考

步骤

  1. 环境准备
    • 根据已安装的 Edge 版本下载对应的 Webdriver
    • 将 Webdriver(名称为 msedgedriver.exe)移动到与 msedge.exe 同级目录下(默认安装路径为 C:\Program Files (x86)\Microsoft\Edge\Application
    • 将 Webdriver 的路径加入环境变量
  2. 实例
    • 在项目中引入 Selenium.WebDriverMicrosoft.Edge.SeleniumTools
    • 使用 dotnet core 打开一个页面
      using Microsoft.Edge.SeleniumTools;
      //...
      var options = new EdgeOptions();
      options.UseChromium = true;
      // options.BinaryLocation = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe";
      options.AddArgument("disable-gpu");
      options.AddArgument("--no-sandbox");
      options.AddArgument("--disable-dev-shm-usage");
      options.AddUserProfilePreference("profile.managed_default_content_settings.images", 2);
      
      string source = string.Empty;
      using (var edge = new EdgeDriver(options)) {
          edge.Navigate().GoToUrl(url);
          Thread.Sleep(5000);
          source = edge.PageSource;
          edge.Quit();
      }
      
      Console.WriteLine(source);
      //...

      注意不要引用 Selenium.WebDriver 官方的 OpenQA.Selenium.Edge,会与 Microsoft.Edge.SeleniumTools 包冲突

      前者的 EdgeOptions 内没有定义 UseChromium,无法正常使用新版 Edge

Continue reading “Dotnet Core Selenium 3 自动化 Chromium Edge”

在写 Steam +1 Telegram Bot 过程中遇到的一些问题

selenium 环境的配置

  • Linux 下参见 Linux配置python selenium + Google Chrome环境
  • macOS与 Linux 大同小异,chromedriver 放到 /usr/local/bin 目录下,如果安装了 Homebrew 则可以通过执行指令
    brew cask install google-chrome

    来安装 Chrome 浏览器

  • Windows 下的 chromedriver 需要放到 PATH 路径下,PATH 路径可以通过右键 【我的电脑】进入【属性 – 高级系统设置 – 环境变量 – 双击 PATH – 新建】来设置

运行 selenium 报错(selenium options)

Linux配置python selenium + Google Chrome环境 中出现过这个问题,长时间不用又忘了

问题已经解决,没有保存具体的报错信息,只能叙述一下引发原因:

开发环境的可以使用 Chrome GUI,将代码部署到服务器(CLI 环境)后,因无法开启 chromedriver 导致代码无法正常运行

因为服务器没有安装 GUI 环境,需要在启动 Chrome 前传入 –headless 参数:

chrome_options = Options()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)

如果使用 root 用户运行程序,还需要加入 –no-sandbox 参数:

chrome_options.add_argument('--no-sandbox')

如果服务器没有GPU,则加入 –disable-gpu 参数:

chrome_options.add_argument('--disable-gpu')

注意,访问有些网站时,使用无头(headless)模式无法获取正常的网页内容,会被判定为客户端有风险

此时只能装一个 GUI 环境,或者发布到 Win Server 上,实测 Win Server (计划任务下 py、pyw 均可以)正常运行,Linux GUI 未测试

加快爬取速度

Update 2020.4.1:

可以通过不加载图片的方式来加快页面加载速度,达到加快爬取速度的效果

实现方法还是添加 chrome options:

'''...'''
chrome_options = Options()
prefs = {'profile.managed_default_content_settings.images': 2}
chrome_options.add_experimental_option('prefs', prefs)
'''...'''

selenium 配合 BeautifulSoup 筛选数据

在一些情况下,需要 selenium 获取动态加载数据或者有防止DDOS(等待x秒)的页面源代码,然后使用 bs 筛选数据,此时可以如下处理:

browser.get(URL)
html = browser.page_source
browser.close()
soup = BeautifulSoup(html, "lxml")

这样之后就可以抛弃 selenium 使用 BeautifulSoup 筛选信息