这是我的第一篇文章,所以我希望我会正确地提出要求。
正如标题所说,我很难通过Selenium WebDriver启动Opera浏览器(我已经尝试过3.1.0和3.2.0版本)。我用java编写代码。
我有一个代码,您可以在其中指定要使用的浏览器,然后指定要访问的网站。 Chrome和Firefox工作得很好,Opera给了我很多地狱。代码:
public class Browser {
public WebDriver driver;
public void startWebDriver (String browser) {
if (browser == "Chrome") {
driver = new ChromeDriver();
}
else if (browser == "Firefox") {
System.setProperty("webdriver.gecko.driver", "c:\\Users\\...\\webdriver\\geckodriver.exe");
driver = new FirefoxDriver();
}
else if (browser == "Opera") {
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir = c:\\Users\\...\\AppData\\Roaming\\Opera Software\\Opera Stable");
options.setBinary("c:\\Program Files\\Opera\\43.0.2442.1144");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
System.setProperty("webdriver.opera.driver", "c:\\Users\\...\\operadriver.exe");
driver = new OperaDriver(capabilities);
失败:功能[{message = unknown error:Opera无法启动 (驱动程序信息:OperaDriver beta = 0.1(87cdb4f0d742fb950d1f0fca1f3f6b483e4fb69c),platform = Windows NT 10.0 x86_64),platform = ANY}] 会议ID:d02baabe92d8bbfd90641a00d2458aef
现在我遇到了一些麻烦,让驱动程序找到甚至找到Opera二进制文件......但是通过手动设置路径来管理。
我很好奇是否有人设法让Opera通过WebDriver工作。在GitHub上,一些人声称他设法让它工作,但使用RemoteWebDriver同时" hacking"使用ChromeDriver而不是OperaDriver运行Opera。我也试过了,它也没有用(过程就是你发现哪个Chromium是基于你的Opera - 我的是Opera 43,它是基于Chromium 56,使用铬驱动程序2.27 - 更多关于你可以看到的那个过程的信息:https://github.com/operasoftware/operachromiumdriver/issues/27,但他在Mac上做到了,我不知道,因为我在Windows机器上可能存在一些差异。
据我所知,没有歌剧本身的官方支持。
这些天有人在Opera上运行Selenium吗?如果是这样,你是如何实现这一目标的?也许我错过了一些非常基本的东西......
任何提示或建议赞赏:)
答案 0 :(得分:0)
不确定你是否仍在寻找答案,但这是我如何使用红宝石中的selenium 3.3实现歌剧执行。
语法
service = Selenium::WebDriver::Chrome::Service.new("<path to operadriver>", <any free port>, {optional so leave it blank})
service.start
例如:
service = Selenium::WebDriver::Chrome::Service.new("/usr/local/bin/operadriver", 12345, {})
service.start
cap = Selenium::WebDriver::Remote::Capabilities.chrome('operaOptions' => {'binary' => '/Applications/Opera.app/Contents/MacOS/Opera', 'args' => ["--ignore-certificate-errors"]})
driver = Selenium::WebDriver.for(:remote, :url => service.uri, :desired_capabilities => cap)
在java中也有一种非常类似的方法,但步骤或逻辑保持不变
1)在某个空闲端口上启动ChromeService
2)启动chrome远程上限,但传递opera和--ignore-certificate-errors选项的二进制
3)将服务和封顶的URL传递给远程webdriver
答案 1 :(得分:0)
我可以通过以下方式在Opera驱动程序3.4.0(本地运行)中在Opera 46,Windows 10中运行我的测试:
System.setProperty("webdriver.chrome.driver", "operadriver.exe");
ChromeOptions options = new ChromeOptions();
options.setBinary("C:\\Program Files\\Opera\\46.0.2597.39\\opera.exe");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(capabilities);
答案 2 :(得分:0)
使用最新的Selenium 3.13和OperaDriver v2.37 您可以使用:
string LibraryDir = new FileInfo((new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath).DirectoryName.Replace("%20", " ");
OperaOptions ooptions = new OperaOptions();
ooptions.BinaryLocation = @"C:\Program Files\Opera\54.0.2952.54\opera.exe";
_Browser = new OperaDriver(LibraryDir, ooptions);
LibraryDir是operadriver.exe的位置(应安装Nuget软件包) BinaryLocation应该指向可执行的Opera浏览器!