首页 > 解决方案 > 如何在 Azure 托管网站上设置浏览器模拟

问题描述

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

我目前已经将一个小型网站部署到免费层 Azure AppService(.NET Core + SQL Server,在他们会给你的免费微型 SQL DB 上)

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

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

唉,我发现 AppServices 不支持安装 Chrome 或类似的,而且 Selenium 可能无论如何都无法工作。(引文


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

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

我上面列出的选项中还有其他考虑因素吗?

标签: c#azureseleniumbrowserhosting

解决方案


我已经这样做了:

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

  • Docker 容器(代理)中的 .NET Core 控制台应用程序,用于处理来自 Azure 服务队列的请求。这将允许您扩展您的代理并获得更多可用性。如果没有 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"]
  • Selenium 与 ChromeDriver。

当一切正常时,在本地测试这个(没有无头模式)构建一个 docker 映像并将其部署到 Azure。

您可以通过创建一个容器化的 .net 控制台应用程序,在本地运行它然后部署它来做到这一点。对您的方法的一个警告是,如果网站更改其结构,您将不得不重新制定您的抓取规则,如果网站使用验证码,您无法抓取它,如果您发送许多请求,它可能会在网站上触发警报尽可能攻击。


推荐阅读