Java org.openqa.selenium.InvalidArgumentException:未知错误:不支持的协议
我在Java org.openqa.selenium.InvalidArgumentException:未知错误:不支持的协议,java,arrays,selenium,selenium-webdriver,webdriver,Java,Arrays,Selenium,Selenium Webdriver,Webdriver,我在Arraylist中添加了网页中的所有链接,然后逐个点击所有URL public class Redirectionlinked1 { public static List findAllLinks(WebDriver driver) { List <WebElement> elementList = new ArrayList(); elementList = driver.findElements(By.tagName("a
Arraylist
中添加了网页中的所有链接,然后逐个点击所有URL
public class Redirectionlinked1
{
public static List findAllLinks(WebDriver driver)
{
List <WebElement> elementList = new ArrayList();
elementList = driver.findElements(By.tagName("a"));
elementList.addAll(driver.findElements(By.tagName("img")));
List finalList = new ArrayList();
for(WebElement element : elementList)
{
if (element.getAttribute("href") != null)
{
finalList.add(element);
}
}
return finalList;
}
public static void main(String[] args) throws Exception
{
System.setProperty("webdriver.gecko.driver", "E:\\Softwares\\gecko\\geckodriver-v0.16.1-win64\\geckodriver.exe");
System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get(" http://testsite.com");
List <WebElement > allImages = findAllLinks(driver);
System.out.println("Total number of elements found " + allImages.size());
driver = new ChromeDriver ();
URI uri =null;
for (WebElement element : allImages) {
if (!driver.getCurrentUrl().equals(element.getAttribute("href")) && driver.)
{
driver.manage().deleteAllCookies();
driver.get(element.getAttribute("href"));
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Thread.sleep(500);
System.out.println(element.getAttribute("href"));
uri = new URI(driver.getCurrentUrl());
try
{
if(uri.getHost().equalsIgnoreCase("SpecificDomain.net"))
{
System.out.println(" Redirected URL-->> "+element.getAttribute("href"));
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
公共类重定向链接1
{
公共静态列表FindAllinks(WebDriver驱动程序)
{
List elementList=新建ArrayList();
elementList=driver.findElements(按.tagName(“a”));
elementList.addAll(driver.findElements(按.tagName(“img”));
List finalList=new ArrayList();
for(WebElement:elementList)
{
if(element.getAttribute(“href”)!=null)
{
添加(元素);
}
}
回归终结者;
}
公共静态void main(字符串[]args)引发异常
{
System.setProperty(“webdriver.gecko.driver”,“E:\\Softwares\\gecko\\geckodriver-v0.16.1-win64\\geckodriver.exe”);
System.setProperty(“webdriver.chrome.driver”,“E:\\chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
驱动程序。获取(“http://testsite.com");
列表所有图像=FindAllinks(驱动程序);
System.out.println(“找到的元素总数”+allImages.size());
驱动程序=新的色度驱动程序();
URI=null;
for(WebElement:allImages){
如果(!driver.getCurrentUrl().equals(element.getAttribute(“href”))和&driver.)
{
driver.manage().deleteAllCookies();
driver.get(element.getAttribute(“href”);
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
睡眠(500);
System.out.println(element.getAttribute(“href”);
uri=新uri(driver.getCurrentUrl());
尝试
{
if(uri.getHost().equalsIgnoreCase(“SpecificDomain.net”))
{
System.out.println(“重定向URL-->”+element.getAttribute(“href”);
}
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}
}
代码按预期工作(在浏览器中启动URL),因为第一个链接稍后会抛出错误:
线程“main”中出现异常
org.openqa.selenium.InvalidArgumentException:未知错误:
不支持的协议
(会话信息:chrome=58.0.3029.110)
(驾驶员信息:chromedriver=2.26.436362(5476ec6bf7ccbada1734a0cdec7d570bb042aa30),平台=Windows NT
6.1.7601 SP1 x86_64)(警告:服务器未提供任何堆栈跟踪信息)
命令持续时间或超时:131毫秒
构建信息:版本:“未知”,版本:“3169782”,时间:“2016-09-29 10:24:50-0700”
系统信息:主机:'ETPUN-LT009',ip:'192.168.2.193',os.name:'Windows 7',os.arch:'amd64',os.version:'6.1',java.version:
'1.8.0_111'
驱动程序信息:org.openqa.selenium.chrome.ChromeDriver
功能[{applicationCacheEnabled=false,rotatable=false,mobileEmulationEnabled=false,networkConnectionEnabled=false,
chrome={chromedriverVersion=2.26.436362
(5476ec6bf7ccbada1734a0cdec7d570bb042aa30),
userDataDir=C:\scoped_dir12784_32532},takesHeapSnapshot=true,
pageLoadStrategy=normal,databaseEnabled=false,handlesAlerts=true,
hasTouchScreen=false,版本=58.0.3029.110,平台=XP,
browserConnectionEnabled=false,nativeEvents=true,
acceptSslCerts=true,locationContextEnabled=true,
WebStorage Enabled=true,browserName=chrome,takesScreenshot=true,
javascriptEnabled=true,CSSSelectorEnabled=true,
意外的行为=}]
会话ID:df813868289a8f15f947ac620b3b1882
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
位于org.openqa.selenium.remote.ErrorHandler.CreateTrowable(ErrorHandler.java:206)
位于org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:164)
位于org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:636)
位于org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:323)
在Practices.Redirectionlinked1.main(Redirectionlinked1.java:99)
我的配置是:-
Chrome-版本58.0.3029.110(64位)
Geckodriver-v0.16.1-win64
Windows-7
Java-1.8.1
这可能是因为您的网站中存在类似于
#
,resources/123.img
的hre链接,这些链接不是完整的URL,触发get会导致异常。您应该进行检查以确保URL有效。可以使用link.startsWith(“http://”)进行比较| | link.startsWith(“https://”)
还有其他地方你的测试也会失败
finalList
声明为列表并返回。必须将其更改为列表,并应使用链接值填充。这是因为您有一个for循环,在其中调用driver.get(newLink)这将重置finalList
中的所有WebElement对象,因为它们在前面被找到并给出异常img
标记没有href
。请使用“src” public static List<String> findAllLinks(WebDriver driver) {
// Declare finalList as string.
List<String> finalList = new ArrayList<>();
// Get the a tags
List<WebElement> elementList = driver.findElements(By.tagName("a"));
// get the img tags
elementList.addAll(driver.findElements(By.tagName("img")));
for (WebElement element : elementList) {
// a tags have "href", img tags have src
String link = element.getTagName().equalsIgnoreCase("a") ? element.getAttribute("href")
: element.getAttribute("src");
// Check if link is not null and whether is a valid link by checking
// starts with http or https
if (link != null && (link.startsWith("http://") || link.startsWith("https://"))) {
finalList.add(link);
}
}
return finalList;
}
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.gecko.driver",
"E:\\Softwares\\gecko\\geckodriver-v0.16.1-win64\\geckodriver.exe");
System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://testsite.com");
List<String> allLinks = findAllLinks(driver);
System.out.println("Total number of elements found " + allLinks.size());
driver = new ChromeDriver();
URI uri = null;
for (String link : allLinks) {
if (!driver.getCurrentUrl().equals(link)) {
driver.manage().deleteAllCookies();
driver.get(link);
Thread.sleep(500);
System.out.println(link);
uri = new URI(driver.getCurrentUrl());
try {
if (uri.getHost().equalsIgnoreCase("SpecificDomain.net")) {
System.out.println("Redirected URL-->> " + link);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
公共静态列表FindAllinks(WebDriver驱动程序){
//将finalList声明为字符串。
List finalList=new ArrayList();
//拿到a标签
List elementList=driver.findElements(按.tagName(“a”));
//获取img标签
elementList.addAll(driver.findEl
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>4.0.0-alpha-5</version>
</dependency>