Selenium+Sikuli (JAVA) читает текст браузера вместо дополнения Chrome, которое мне нужно
Я пытаюсь очистить веб-сайты от поиска в Google по запросу "Пиксели Facebook". Через достаточно google+stackru я создал скрипт, который хорошо работает, за исключением одной вещи: текст аддона 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, но это бесполезно, потому что некоторые из сайты имеют пиксели. Я не получаю ошибку как таковую, но могу сказать, что есть проблема из моих заявлений печати. Любая помощь ценится заранее! Йоши