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



在决定走哪条路线之前,我想检查一下我是否考虑了所有的选择。

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

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

  • 我的浏览器模拟最终是从浏览器屏幕上抓取一些信息,下载并保存文件,但我必须模拟登录和复杂的导航,所以我认为它需要是一个完整的浏览器模拟,而不仅仅是手动发送HTTP请求,这样才能在没有目标网站大量反向工程的情况下工作
  • 我正在抓取的网站不希望被抓取,也没有任何我可以使用的API。
    • 为了避免任何疑问,我所做的刮擦绝对不违法或不道德。可以想象,它打破了一些T&Cs,但我已经在单独检查了
  • 这是一个个人项目,所以我必须让它适合免费托管的内容

我觉得这很简单——我只需要在我的网站上运行Selenium。

遗憾的是,我发现AppServices不支持安装Chrome或类似程序,而且Selenium可能无论如何都不起作用。(引文)


有什么方法可以解决这个问题我想我可以:

  • 将我的Azure设置为VM
    • 让我完全控制主机环境
    • 更多的DevOps工作
    • 我在Azure中看不到明显的免费虚拟机选项
  • "在容器中进行"。
    • 我发现一个消息来源建议容器允许安装浏览器,但保持较低的DevOps开销
    • 我认为Azure确实免费支持Kubernetes
  • 重新设计我的代码,这样它就不会试图模拟浏览器,只会猜测正确的HTTP请求
    • (我认为这是难以置信的大量开发工作)
  • 使用其他一些纯C#浏览器模拟?头孢夏普?
    • 我认为当前的症结在于Selenium要求Chrome与我正在运行的C#应用程序分开存在。如果我能让"浏览器"成为C#的直接组成部分,也许效果会更好
    • 看起来CefSharp可以在不安装单独的Chrome实例的情况下模拟Chromium,所以这是一个可行的选择吗
    • AppServices可能会遇到同样的"不受支持"问题
    • 我认为这种方法可能会失去使用IWebDriver界面的乐趣,不过:(
  • 不要在Azure上托管。
    • 可能涉及某种自我托管,通过这种方式,我设置我的个人计算机来托管该网站,并通过适当的IP映射、防火墙打开和其他DevOps faff将该网站暴露在世界面前

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

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

我已经使用:

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

  • 。NET核心控制台应用程序,该应用程序位于docker容器(代理)中,用于处理来自Azure服务队列的请求。这将使您能够扩展您的代理并获得更多可用性。没有虚拟机,我不认为你不能仅仅因为无服务器的图形支持限制。

这里有一个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"]
  • 含铬的硒

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

您可以创建一个容器化的.net控制台应用程序,在本地运行它,然后部署它。对于你的方法,一个警告是,如果网站改变了结构,你将不得不重新制定你的抓取规则,如果网站使用Captcha,你就无法抓取它,如果你发送了很多请求,它可能会在网站上引发警报,可能会受到攻击。

最新更新