Как мне найти что-то в Google, нажмите ссылку, затем вернитесь к поиску и нажмите следующую ссылку (без повторения уже отобранных ссылок) и после ссылок, которые страница завершена, перейдите на страницу 2 и повторите те же шаги подряд?Перемещение между страницами Google Поиск с помощью selenium - Java
До сих пор я могу перейти к первой ссылке, перейти на страницу и вернуться в список только что просмотренных ссылок.
package Search;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class GoogleSearch {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
System.setProperty("webdriver.ie.driver", "C:/Users/paulo.roberto/Documents/eclipse/Selenium/IEDriverServer.exe");
DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
WebDriver driver = new InternetExplorerDriver(caps);
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.get("https://www.google.com.br");
driver.findElement(By.name("q")).sendKeys("test");
driver.findElement(By.name("btnG")).click();
WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("resultStats")));
// find the number of pages
int size = driver.findElements(By.cssSelector("[valign='top'] > td")).size();
for(int j = 1 ; j < size ; j++) {
if (j > 1) {// we don't need to navigate to the first page
driver.findElement(By.cssSelector("[aria-label='Page " + j + "']")).click(); // navigate to page number j
}
String pagesearch = driver.getCurrentUrl();
List<WebElement> findElements = driver.findElements(By.xpath("//*[@id='rso']//h3/a"));
System.out.println(findElements.size());
for(int i=0;i<findElements.size();i++){
findElements= driver.findElements(By.xpath("//*[@id='rso']//h3/a"));
findElements.get(i).click();
driver.navigate().to(pagesearch);
// or driver.navigate().back();
}
}
}
}
сообщение на консоль:
Started InternetExplorerDriver server (32-bit) 2.48.0.0 Listening on port 37101 10 10 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 0 at java.util.ArrayList.rangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at Search.GoogleSearch.main(GoogleSearch.java:48)
Почему вы хотите повторно загрузить результаты поиска Google несколько раз? Загрузите его только один раз, у вас есть результат, который вы сможете продолжить. Я бы использовал JSoup для анализа страниц вместо Selenium. – tak3shi
@ tak3shi На самом деле, я изучаю селен и поэтому создаю код в качестве примера. Желание не использует утилиту jsoup, просто хочу, чтобы иметь возможность перемещаться по URL-адресам, а затем перейти к следующим страницам поиска и нажать на следующую ссылку, вот и все. –
ОК, это прекрасно, но google обнаружит автоматизированный доступ, и в какой-то момент вы получите страницу captcha вместо результатов поиска. – tak3shi