使用Ruby在Selenium Webdriver中为PhantomJS设置自定义用户代理

Eth*_*ron 2 ruby user-agent phantomjs selenium-webdriver ghostdriver

我今晚一直在网上,现在大约3-4个小时.我已经尝试过每一个我遇到过的建议.我甚至检查了Selenium驱动程序对象上的"capabilities"对象,以确保它实际设置在那里,实际上它是:

#<Selenium::WebDriver::Remote::Capabilities:0x00000007475cf0
 @capabilities=
  {:browser_name=>"phantomjs",
   :version=>"1.9.7",
   :platform=>:"linux-unknown-64bit",
   :javascript_enabled=>true,
   :css_selectors_enabled=>true,
   :takes_screenshot=>true,
   :native_events=>true,
   :rotatable=>false,
   :firefox_profile=>nil,
   :proxy=>#<Selenium::WebDriver::Proxy:0x00000007475908 @type=:direct>,
   "driverName"=>"ghostdriver",
   "driverVersion"=>"1.1.0",
   "handlesAlerts"=>false,
   "databaseEnabled"=>false,
   "locationContextEnabled"=>false,
   "applicationCacheEnabled"=>false,
   "browserConnectionEnabled"=>false,
   "webStorageEnabled"=>false,
   "acceptSslCerts"=>false,
   "proxy"=>{"proxyType"=>"direct"},
   "phantomjs.page.settings.userAgent"=>
    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0"}>
Run Code Online (Sandbox Code Playgroud)

除了"phantomjs.page.settings.userAgent"之外,我还尝试了"userAgent"等等.在过去的3-4个小时里我能在网上找到的所有东西,我都试过了.显然,在2013年初,这是一个相当普遍的问题,而我所说的解决方案显然是常见的解决方案.这些都不起作用,事实上,我从这一点信息中确切地知道这一点(注意User-Agent是"Ruby"):

UNCAUGHT EXCEPTION: {"errorMessage"=>"Element is not currently visible and may not be manipulated",
 "request"=>
  {"headers"=>
    {"Accept"=>"application/json",
     "Accept-Encoding"=>"gzip;q=1.0,deflate;q=0.6,identity;q=0.3",
     "Connection"=>"close",
     "Content-Length"=>"2",
     "Content-Type"=>"application/x-www-form-urlencoded",
     "Host"=>"localhost:9876",
     "User-Agent"=>"Ruby"},
   "httpVersion"=>"1.1",
   "method"=>"POST",
   "post"=>"{}",
   "postRaw"=>"{}",
   "url"=>"/click",
   "urlParsed"=>
    {"anchor"=>"",
     "query"=>"",
     "file"=>"click",
     "directory"=>"/",
     "path"=>"/click",
     "relative"=>"/click",
     "port"=>"",
     "host"=>"",
     "password"=>"",
     "user"=>"",
     "userInfo"=>"",
     "authority"=>"",
     "protocol"=>"",
     "source"=>"/click",
     "queryKey"=>{},
     "chunks"=>["click"]},
   "urlOriginal"=>
    "/session/a03cc440-4f5c-11e4-8854-ed9c22bf60af/element/%3Awdc%3A1412822036214/click"}}
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果您使用的是Java ,那么有关Selenium问题以及许多其他问题的信息和讨论会有很多.在这一点上,我希望我在这个项目中使用Java的各种方式,但现在我有30,000行代码,我在过去2个月内完全自己编写.至少,失去这项工作不仅对我个人来说是毁灭性的,而且对我的工作来说也是灾难性的.

是什么赋予了?我是否真的需要深入挖掘并自定义源以获得我想要的内容,或者现在是否真的实现了此功能?我再次看到了2013年初的所有答案,但它们对我不起作用,我不知道为什么,或者如何轻松解决它.我正处于截止日期,所以这开始变得非常紧张.

有没有人对我有任何想法?请记住,我使用的是Ruby,而不是Java.

Selenium-webdriver是2.43.PhantomJS是1.9.7.GhostDriver是1.1.0.

对我来说,这似乎不可思议,无法修改您的用户代理.

如果我能提供任何其他可能有帮助的信息,请告诉我.

如果你愿意分享一些想法或一些信息让我指出正确的方向,我会提前感谢.

小智 6

在Java中我做了以下内容:(PhantomJS 1.9.8,Selenium 2.39)

String userAgent = "Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; LG-LU3000 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(PhantomJSDriverService.PHANTOMJS_PAGE_SETTINGS_PREFIX + "userAgent", userAgent);
PhantomJSDriver driver = new PhantomJSDriver(caps);
Run Code Online (Sandbox Code Playgroud)

也许Ruby有类似的设置选项.看看"page.settings.userAgent"