-1

我正在编写一个我试图代理的网络爬虫,但不能完全弄清楚如何在 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 设置扩展通常没有问题。

4

1 回答 1

-2

https://github.com/GoogleChrome/puppeteer/issues/659

-1 因为这是谷歌搜索“chrome headless extension”的最佳结果

关于通过代理发送每个请求,我认为您要么需要自己与 chrome 驱动程序交互(劫持猎犬),要么跳过猎犬并直接使用 chrome 或通过 selenium 网格。

我认为问题源于 hound 将启动一个单独的 chrome 实例,其中将定义代理设置。使用该代理完成进一步的请求。

因此,为了为不同的会话实现多个代理连接,您要么需要一种通过导航步骤设置它们的方法(访问然后充当硬代理的代理网站),要么完全使用不同的浏览器实例(尽管我可能错了,也许有代理请求的更简单方法)

于 2018-01-22T14:33:59.300 回答