【问题标题】:Loading ChromeDriver Extensions or Proxy ChromeDriver and Elixir加载 ChromeDriver 扩展或代理 ChromeDriver 和 Elixir
【发布时间】: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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • -1 认为我在询问有关组合代理并希望同时加载扩展程序的问题。我说我想使用 chromeOptions --proxy-server arg 与代理建立会话,但它不起作用。作为最后的手段,我尝试加载一个扩展程序,该扩展程序将在常规 Chrome(非无头)会话中设置代理,但仍然不成功。我以前在 Ruby 中做过这个,并试图在 Elixir 中做到这一点。
    • 实际上你没有提到你在非无头模式下尝试了扩展,你最终说在 ruby​​ 和 java 中它只是工作 - 实际上在无头模式中你不能加载扩展全部,所以你应该得到另一个-1,因为你没有做出区分
    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 2018-01-06
    • 2015-09-14
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多