Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.openqa.selenium.InvalidArgumentException:未知错误:不支持的协议_Java_Arrays_Selenium_Selenium Webdriver_Webdriver - Fatal编程技术网

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”

  • 这是所有这些更改后的代码。请注意,可能还有其他条件来检查URL是否有效,我在这里没有列出这些条件

        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>