簡體   English   中英

分頁selenium

[英]Pagination in selenium

我是 selenium 的新手,並遵循了一個關於從 indeed.com 中抓取作業的抓取小教程,但我遇到了一些問題,因為自教程編寫以來,某些元素似乎已被重命名。 我被困在這部分:

List<WebElement> pagination = driver.findElements(By.xpath("//ul[@class='pagination-
list']/li"));
int pgSize = pagination.size();
for (int j = 1; j < pgSize; j++) {
Thread.sleep(1000);
WebElement pagei = driver.findElement(By.xpath("(//ul[@class='pagination-list']/li)[" + j + "]"));
pagei.click();

xpath 需要更新,因為無法再找到該元素。 我已將 xpath 更改為此,但列表未填充:

//nav[@aria-label='pagination']

當我這樣做時,它打印零,這意味着沒有元素被添加到列表中:

List<WebElement> pagination = driver.findElements(By.xpath("//nav[@aria-label='pagination']"));
    int size = pagination.size();
    System.out.println(size);

這是正確的 xpath 嗎? 我不確定應該將什么填充到 Webelements 列表中? 它們應該是頁碼嗎?

您可以嘗試此路徑//nav[@role='navigation']/div這將為您提供 6 個元素。 5 個用於頁面,1 個用於下一個按鈕

在此處輸入圖像描述

如果這不是正確的頁面,請分享URL和元素,我會盡力提供解決方案。

網站indeed.com自文章Web Scraping using selenium 和 Java撰寫以來發生了變化。 分頁元素已更改。 目前分頁是通過以下方式實現的:

 <nav role="navigation" aria-label="pagination" class="css-jbuxu0 ecydgvn0"> <div class="css-tvvxwd ecydgvn1"> <button data-testid="pagination-page-current" class="css-1cpyzlr e8ju0x51">1</button> </div> <div class="css-tvvxwd ecydgvn1"> <a data-testid="pagination-page-2" rel="nofollow" aria-label="2" href="/jobs?q=Api+Testing&amp;l=Pune&amp;start=10" class="css-e9oyys e8ju0x50">2</a> </div> <div class="css-tvvxwd ecydgvn1"> <a data-testid="pagination-page-3" rel="nofollow" aria-label="3" href="/jobs?q=Api+Testing&amp;l=Pune&amp;start=20" class="css-e9oyys e8ju0x50">3</a> </div> <div class="css-tvvxwd ecydgvn1"> <a data-testid="pagination-page-4" rel="nofollow" aria-label="4" href="/jobs?q=Api+Testing&amp;l=Pune&amp;start=30" class="css-e9oyys e8ju0x50">4</a> </div> <div class="css-tvvxwd ecydgvn1"> <a data-testid="pagination-page-5" rel="nofollow" aria-label="5" href="/jobs?q=Api+Testing&amp;l=Pune&amp;start=40" class="css-e9oyys e8ju0x50">5</a> </div> <div class="css-tvvxwd ecydgvn1"> <a data-testid="pagination-page-next" rel="nofollow" aria-label="Next Page" href="/jobs?q=Api+Testing&amp;l=Pune&amp;start=10" class="css-cy0uue e8ju0x50"> <svg xmlns="http://www.w3.org/2000/svg" focusable="false" role="img" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true" class="css-1xqhio eac13zx0"> <path d="M9.888 5.998a.506.506 0 00-.716-.008l-.707.707a.506.506 0 00.01.716L13.06 12l-4.587 4.587c-.2.2-.204.521-.009.716l.707.707a.507.507 0 00.717-.009l5.647-5.648c.1-.1.148-.233.144-.366a.492.492 0 00-.144-.34v-.001a.611.611 0 00-.009-.009L9.888 5.998z"> </path> </svg> </a> </div> </nav>


解決方案

您可以使用以下解決方案,而不是創建分頁元素列表,因為分頁會隨着您的前進而不斷增加:

System.setProperty("webdriver.chrome.driver", "C:\\BrowserDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
ChromeDriver driver = new ChromeDriver(options);
driver.get("https://in.indeed.com/");
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
// Create a Scanner object to prompt for user input
Scanner myObj = new Scanner(System.in);
System.out.println("What jobs are you looking for ? ");
String job = myObj.nextLine();
System.out.println("Which city are you looking for ? ");
String city = myObj.nextLine();
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input#text-input-what"))).sendKeys(job);
driver.findElement(By.cssSelector("input#text-input-where")).sendKeys(city + Keys.RETURN);
for (int j=1; j<6; j++)
{
    driver.findElement(By.xpath("//button[@data-testid='pagination-page-current']//following::div[1]/a[@data-testid]")).click();
    Thread.sleep(15000);
}

筆記:

  • 這里的6是你想要抓取的(pages-1)的數量。
  • Thread.sleep(15000)是提供window第一次點擊分頁項后pulate Email地址

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM