我正在编写一个我试图代理的网络爬虫,但不能完全弄清楚如何在 Elixir 中做到这一点。
我正在使用在无头 ChromeDriver 上运行的 Hound。我通过https://luminati.io购买了一些代理 IP ,它们提供 chrome 扩展和用户/密码基础代理服务器。
webscraper 操作由一个代表用户抓取 web 的 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/"
有没有人有使用 chrome 驱动程序和 Elixir 的经验?使用 Ruby 和 Java 设置扩展通常没有问题。