Исключение в потоке "main" java. net .MalformedURLException: нет ошибки протокола при поиске неработающих ссылок на странице с использованием Selenium и Java - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь найти неработающую ссылку на странице с помощью кода Selenium (Java), но я столкнулся с этой проблемой. Я не могу запустить этот код из-за нижеуказанного исключения. В этом коде определяется общее количество ссылок на странице, а затем URL-адрес ссылок. Пожалуйста, просмотрите проблему и дайте мне решение для этого.

Exception in thread "main" java.net.MalformedURLException: no protocol: 
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at fire.Weil.main(Weil.java:57)

Мой код: -

package fire;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Weil {

    public static void main(String[] args) throws MalformedURLException, IOException{

        System.setProperty("webdriver.gecko.driver", "C:\\Users\\sumitk\\Downloads\\Selenium Drivers\\Gecodriver\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();

        //delete all cookies
        driver.manage().deleteAllCookies();

        //dynamic wait
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

        //open site
        driver.get("https://www.weil.com/");

        //1. get the list of all the links and images
        List<WebElement> linklist = driver.findElements(By.tagName("a"));
        linklist.addAll(driver.findElements(By.tagName("img")));

        System.out.println("Size of full links and images--->"+ linklist.size());

        List<WebElement> activeLinks =new ArrayList<WebElement>();

        // 2. iterate linklist : exclude all the links/images does not have any href attribute
        for(int i=0; i<linklist.size(); i++)
        {
            System.out.println(linklist.get(i).getAttribute("href"));
            if(linklist.get(i).getAttribute("href") !=null)
            {
                activeLinks.add(linklist.get(i));
            }
        }

        //get the size of active links list.
        System.out.println("Size of active links and images--->"+ activeLinks.size());

        //3. check the href url, with httpconnection api.
        for(int j=0; j<activeLinks.size(); j++)
        {
            HttpURLConnection connection=(HttpURLConnection) new URL(activeLinks.get(j).getAttribute("href")).openConnection();
            connection.connect();
            String response=connection.getResponseMessage();
            connection.disconnect();
            System.out.println(activeLinks.get(j).getAttribute("href") +" --->"+response);
        }
    }

}

Ответы [ 2 ]

1 голос
/ 27 января 2020

Это сообщение об ошибке ...

Exception in thread "main" java.net.MalformedURLException: no protocol:

... означает, что ваша программа пыталась получить доступ к URL, у которого нет протокола, т.е. HTTP или HTTPS отсутствует .

Ваш лог c был почти идеальным. Несколько слов:


Ссылка

Соответствующее подробное обсуждение можно найти в:

0 голосов
/ 27 января 2020

Это связано с тем, что веб-страница содержит элементы тега «a» без ссылки на ключевое слово href.

, т. Е. Самый верхний левый значок списка и значок поиска.

См.

enter image description here

Использование блока try catch для java. net. MalformedURLException может помочь вам и позволит вам двигаться вперед с желаемым потоком.

enter image description here

...