Не удалось получить ссылку на новостные статьи на странице новостей Google, используя Selenium

harsha ray спросил: 28 апреля 2018 в 09:06 в: java

Нижеприведенный скрипт переходит на страницу новостей после поиска текста "Ливерпуль", а затем распечатывает все ссылки на файл и печатает их также в консоли. Проблема здесь в том, что я не могу получить ссылки на все статьи новостей на странице новостей Google. За исключением того, что все другие ссылки на страницу печатаются

public static void main(String[] args) throws IOException {        String URL = "https://www.google.com";
        WebDriver driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get(URL);
        WebElement searchBar = driver.findElement(By.xpath("//*[@id='lst-ib']"));
        searchBar.sendKeys("Liverpool");
        WebElement clickSearch = driver.findElement(By.name("btnK"));
        clickSearch.click();
        WebElement newsButton = driver.findElement(By.xpath("//*[@id='hdtb-msb-vis']/div[2]/a"));
        newsButton.click();
        java.util.List<WebElement> links = driver.findElements(By.tagName("a"));
        System.out.println(links.size());
        FileWriter file = new FileWriter("/Users/lekharaj/Desktop/LFC.txt");
        BufferedWriter b = new BufferedWriter(file);
        for(int i=0;i<links.size();i++){
            String text = links.get(i).getAttribute("href");
            System.out.println("\n"+text);
            b.write(text);
            b.newLine();
            b.flush();
            }
    }

2 ответа

Есть решение
DebanjanB ответил: 28 апреля 2018 в 09:32

Чтобы найти текст Ливерпуль на Домашняя страница Google , а затем распечатать все ссылки, вы можете использовать следующее решение:

  • Блок кода:

    System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    driver.navigate().to("https://www.google.com/");
    WebElement submit_button = driver.findElement(By.name("q"));
    submit_button.sendKeys("Liverpool");
    submit_button.submit();
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("News"))).click();
    List <WebElement> my_list = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("h3.r.dO0Ag>a")));
    System.out.println("The list of href links are : ");
    for(WebElement element:my_list)
        System.out.println(element.getAttribute("href"));
    
  • Выход консоли:

    The list of href links are : 
    http://www.espn.com/soccer/club/liverpool/364/blog/post/3506156/jurgen-klopp-stability-at-liverpool-the-envy-of-their-premier-league-rivals
    https://www.liverpoolfc.com/news/first-team/302415-liverpool-fc-songs-fans-europe
    http://www.espn.com/soccer/club/liverpool/364/blog/post/3489163/liverpools-andrew-robertson-hoping-to-mimic-predecessor-alan-kennedys-heroics-against-real-madrid
    https://www.liverpoolecho.co.uk/sport/football/transfer-news/christian-pulisic-refuses-comment-reports-14688647
    https://www.liverpoolecho.co.uk/sport/football/football-news/liverpool-legend-terry-mcdermotts-three-14688746
    http://www.skysports.com/football/news/11669/11381416/liverpool-transfer-rumours-gianluigi-donnarumma-daniel-ceballos-jamaal-lascelles-and-james-tarkowski
    http://www.skysports.com/more-sports/ufc/news/29876/11380754/ufc-how-liverpool-built-darren-till
    https://www.independent.co.uk/sport/football/transfers/liverpool-transfer-news-jurgen-klopp-shortlist-tarkowski-lascelles-premier-league-epl-a8361576.html
    https://www.belfasttelegraph.co.uk/sport/football/premier-league/liverpool/this-real-madrid-star-can-crush-liverpools-champions-league-dream-says-giggs-36932660.html
    http://kwese.espn.com/football/blog/transfer-talk/79/post/3506910/transfer-rater-neymar-to-real-madridjamaal-lascelles-to-liverpool
    
harsha ray ответил: 28 апреля 2018 в 10:05
Спасибо, это сработало!
Murthi ответил: 28 апреля 2018 в 09:32

Вы можете использовать следующий x-путь для получения только ссылок на статьи.

//article/a

В коде

public static void main(String[] args) throws IOException {    String URL = "https://www.google.com";
    WebDriver driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.get(URL);
    WebElement searchBar = driver.findElement(By.xpath("//*[@id='lst-ib']"));
    searchBar.sendKeys("Liverpool");
    WebElement clickSearch = driver.findElement(By.name("btnK"));
    clickSearch.click();
    WebElement newsButton = driver.findElement(By.xpath("//*[@id='hdtb-msb-vis']/div[2]/a"));
    newsButton.click();
    java.util.List<WebElement> links = driver.findElements(By.xpath("//article/a"));
    System.out.println(links.size());
    FileWriter file = new FileWriter("/Users/lekharaj/Desktop/LFC.txt");
    BufferedWriter b = new BufferedWriter(file);
    for(int i=0;i<links.size();i++){
        String text = links.get(i).getAttribute("href");
        System.out.println("\n"+text);
        b.write(text);
        b.newLine();
        b.flush();
        }
}
Murthi ответил: 28 апреля 2018 в 10:01
пожалуйста, примите мой ответ, если он разрешит вашу проблему.