【发布时间】:2018-01-21 19:47:34
【问题描述】:
我正在编写一个试图代理的网络爬虫,但不知道如何在 Elixir 中完成。
我正在使用在无头 ChromeDriver 上运行的 Hound。我通过https://luminati.io 购买了一些代理 IP,它们同时提供 chrome 扩展和基于用户/密码的代理服务器。
webscraper 操作由代表用户抓取网络的 GenServer 组成。该应用程序没有前端,它接受通过我在 Telegram 上构建的机器人发送给它的命令,因此当用户发送登录命令时,它会触发 GS 的登录功能。
此时,GenServer 将使用 Hound.change_session_to/2 更改 ChromeDriver 会话,然后将用户登录。
这很好用,但现在我想通过代理服务器通过用户名和密码发送每个请求。当使用 Hound 更改会话时,它也允许设置 chromeOptions。
ua = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36"
change_session_to(String.to_atom(account.username), %{browserName: "chrome", chromeOptions: %{"args" => ["--user-agent=#{ua}", "--proxy-server=http://user:password@proxy.luminati.io:22225"]}})
navigate_to "https://www.website.com/"
我尝试做的另一件事是加载 luminati 的 ChromeExtension,我可以用它来代理流量,但我无法为每个会话加载扩展。我下载了打包好的 CRM chrome 扩展并将其放在我的 priv 文件夹中。当会话加载时,它似乎可以很好地加载用户代理,但扩展永远不会启动。当我尝试加载扩展时,我没有无头运行。
ua = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36"
priv_dir = :code.priv_dir(:boost_buddy)
change_session_to(String.to_atom(account.username), %{browserName: "chrome",
chromeOptions: %{"extensions" => ['#{priv_dir}/luminati/3.2_1'], "args" => ["-
-user-agent=#{ua}", "--proxy-server=http://user:password@proxy.luminati.io:22225"]}})
navigate_to "https://www.website.com/"
有没有人有在 Elixir 中使用 chrome 驱动程序的经验?使用 Ruby 和 Java 设置扩展通常没有问题。
【问题讨论】:
标签: google-chrome-extension elixir selenium-chromedriver phoenix-framework hound