如何在Azure托管网站上设置浏览器模拟

时间:2019-02-07 08:08:36

标签: c# azure selenium browser hosting

在尝试决定采用哪种路线之前,我想检查一下我是否已考虑所有选择。

我目前已将一个小型网站部署到免费的Azure AppService(.NET Core + SQL Server,他们将为您提供的免费小型SQL DB上)

我希望该站点能够在幕后获取一些需要浏览器模拟的数据。

  • 我的浏览器模拟最终是从浏览器屏幕上抓取一些信息,然后下载并保存文件,但是我必须模拟登录和复杂的导航,因此我认为它需要成为完整的浏览器模拟,而不仅仅是发送HTTP手动请求,以便在不进行大量目标站点反向工程的情况下工作。
  • 我要抓取的网站不会被抓取,并且没有可供我使用的任何API。
    • 为避免任何疑问,我正在做的刮刮操作绝对并非违法或不道德的。可以想象它破坏了一些条款和条件,但是我已经在单独检查它了。
  • 这是一个个人项目,因此重要的是,我要使其适合可以免费托管的内容。

我认为这很简单-我只需要在自己的站点中运行Selenium。

A,我发现AppServices不支持安装Chrome或类似程序,并且Selenium可能仍然无法工作。 (Citation


有哪些方法可以解决此问题? 我认为我可以:

  • 将Azure设置为VM
    • 使我可以完全控制托管环境。
    • 投入了更多的DevOps努力。
    • 我在Azure中看不到明显的免费VM选项。
  • “在容器中进行”。
    • 我找到了一个消息来源,暗示容器可以允许浏览器安装,但可以保持较低的DevOps开销。
    • 我认为Azure 确实免费支持Kubernetes。
  • 重新构建我的代码,以便它不会尝试模拟浏览器,只是猜测正确的HTTP请求。
    • (我认为这是非常庞大的开发工作)
  • 使用其他一些纯C#浏览器模拟。 ?CefSharp?
    • 我认为当前的症结在于Selenium要求Chrome与我正在运行的C#应用​​分开存在。如果我可以使“浏览器”成为C#的直接组成部分,也许效果更好?
    • 似乎CefSharp可以在不安装单独的Chrome实例的情况下模拟Chromium,这是可行的选择吗?
    • AppServices可能会遇到同样的“不受支持”的问题。
    • 我认为这种方法可能会失去非常令人愉快的IWebDriver界面,尽管:(
  • 不要在Azure上托管。
    • 可能涉及某种形式的自我托管,借此我设置了个人计算机来托管该站点,并通过适当的IP映射,防火墙打开和其他DevOps功能将该站点公开给全世界。

还有我不知道的其他选项吗?(尤其是Azure内置的选项!)

我上面列出的选项中还有其他注意事项吗?

1 个答案:

答案 0 :(得分:0)

我已经使用:

  • CefSharp(您可以设置用户代理以模拟chrome版本)(无头模式)。

  • Docker容器(代理)中的
  • .NET Core控制台应用程序,用于处理来自Azure Service Queue的请求。这将使您能够扩展代理并获得更多可用性。没有VM,我认为您不能仅仅因为无服务器上的图形支持限制而已。

这是此镜像的docker示例,可在构建时下载并安装.net框架:

FROM microsoft/windowsservercore
ADD . /ScrapingService
WORKDIR /ScrapingService
ADD https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe /vc_redist.x64.exe
RUN C:\vc_redist.x64.exe /quiet /install
ENTRYPOINT ["cmd.exe", "/k", "Scraper.exe"]
  • 使用ChromeDriver的硒。

在一切正常的情况下,构建一个docker映像并将其部署到Azure时,在本地测试(无头模式)。

您可以通过创建一个容器化的.net控制台应用程序,在本地运行它然后进行部署来实现。 一种警告是,如果网站更改了结构,则必须重新制定抓取规则;如果网站使用验证码,则无法抓取;如果您发送许多请求,则它可能会在网站上触发警报尽可能的攻击。<​​/ p>