Selenium + Sikuli (JAVA) читает текст браузера вместо дополнения Chrome, которое мне нужно - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь очистить веб-сайты от поиска в Google по запросу "Pixels Facebook".Через достаточно google + stackoverflow я создал скрипт, который хорошо работает, за исключением одной вещи: текст аддона Pixel Facebook, который мне нужен для запуска остальной части скрипта, уклонился от моих различных вариантов кода для этого фрагмента.Пожалуйста, смотрите код ниже:

import java.io.IOException;
import java.util.Scanner;
import java.util.Set;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.sikuli.script.FindFailed;
import org.sikuli.script.Match;
import org.sikuli.script.Screen;
import org.sikuli.basics.Settings;
import org.sikuli.script.Pattern;



public class GoogleSearchJava {
public static final String GOOGLE_SEARCH_URL = "https://www.google.com/search";
public static void main(String[] args) throws IOException, InterruptedException {
        FileWriter writer = new FileWriter("path/to/gsj.csv");
        //Allow for image ORR
        Settings.OcrTextSearch= true;
        Settings.OcrTextRead=true;

        //Taking search term input from console
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please enter the search term."+"\n");
        String searchTerm = scanner.nextLine().trim();
        String[] splitSearchTerm = searchTerm.split(" ");
        String searchTermResult = String.join("+", splitSearchTerm);

        System.out.println("Please enter the number of results. Example: 5 10 20"+"\n");
        int num = scanner.nextInt();
        scanner.close();

        String searchURL = GOOGLE_SEARCH_URL + "?q="+searchTermResult+"&num="+num;
        //without proper User-Agent, we will get 403 error
        Document doc = Jsoup.connect(searchURL).userAgent("Mozilla/5.0").get();

        //If google search results HTML change the <h3 class="r" to <h3 class="r1"
        //we need to change below accordingly
        Elements results = doc.select("h3.r > a");

        for (Element result : results) 
        {
            String linkHref = result.attr("href");
            String linkText = result.text();
            System.out.println("Text::" + linkText + ", URL::" + linkHref.substring(6, linkHref.indexOf("&")));
            // Opening chrome with that addon
            ChromeOptions options = new ChromeOptions();
           // options.addArguments("--disable-extensions");
            options.addExtensions(new File("/path/to/fdgfkebogiimcoedlicjlajpkdmockpc-1.1.6-Crx4Chrome.com.crx"));     
            System.setProperty("webdriver.chrome.driver","/path/to/chromedriver.exe" );
            WebDriver driver = new ChromeDriver(options);
            driver.manage().window().maximize();



            System.out.println("Opening extension");

            driver.get("chrome-extension://fdgfkebogiimcoedlicjlajpkdmockpc/fb_notif.html");
            driver.get(linkHref.substring(7, linkHref.indexOf("&")));
            Thread.sleep(10000);  

            // Creating object to the Sikuli screen class
            Screen s=new Screen();
            //Finding and clicking on the Addon image           
             try {
                 s.find("/path/to/AddonIcon.png");
                 s.click("/path/to/AddonIcon.png", 10);
                 Thread.sleep(3000);

                 s.find("path/to/AddonIconOrig.png");
                 s.click("/path/to/AddonIconOrig.png",10);
                 Thread.sleep(5000);

                    }
             catch (FindFailed e) 
             {            
                e.printStackTrace();
             }   
                    String popup = s.text();
                    System.out.println(popup);
                    driver.close();
                    String search  = "No pixels found";
                    if ( popup.toLowerCase().indexOf(search.toLowerCase()) >-1) 
                    {
                        System.out.println("I found the keyword");
                        List<String> test = new ArrayList<>();
                        test.add(linkHref.substring(7, linkHref.indexOf("&")));
                        String collect = test.stream().collect(Collectors.joining(","));

                        writer.write(collect);
                        writer.write("\n");   
                 } 
                    else 
                    {
                    System.out.println("not found");
                    }
             }   
        writer.close();
            }

}   

Код оценивает 2 различных значка аддона, потому что значок Facebook Pixel Helper изменяется в зависимости от присутствия пикселей Facebook.Кроме того, изменив порядок, в котором я получаю URL-адрес пользовательского ввода и получаю html-аддон, то есть, чтобы первый шел первым, а потом - 100%, все ссылки не имеют пикселя Facebook, но это бесполезно, потому что некоторые изсайты имеют пиксели.Я не получаю ошибку как таковую, но могу сказать, что есть проблема из моих заявлений печати.Любая помощь ценится заранее!Йоши

...