硒新手在這里。到目前為止,我嘗試的示例運行良好,但現在我偶然發現了一個似乎不起作用的案例:
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class GeckoDriverTest
{
public static void main(String[] args) throws Throwable
{
System.setProperty("webdriver.gecko.driver", "D://XXX/seleniumdrivers/geckodriver.exe");
FirefoxDriver driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://www.aerzen.com/de/karriere/stellenangebote.html");
System.out.println("URL = " driver.getCurrentUrl());
Thread.sleep(3000);
driver.findElement(By.cssSelector("a.consent-banner--accept.button.submit")).click();
Thread.sleep(3000);
System.out.println("URL = " driver.getCurrentUrl());
List<WebElement> elements = driver.findElements(By.cssSelector("tr > td > a"));
System.out.println("Elements: " elements.size());
for(WebElement element : elements)
{
String url = element.getAttribute("href");
System.out.println(url);
}
}
}
第一部分確實有效,但“tr > td > a”選擇器沒有找到任何元素,盡管我很確定它們存在(我可以在瀏覽器視窗中看到它們)。
知道那里出了什么問題嗎?非常感謝。
uj5u.com熱心網友回復:
該表位于 iframe 內。為了訪問這些元素,您需要切換到該 iframe。
也代替tr > td > acssSelector 嘗試使用table td.real_table_col1 acssSelector。
這應該會更好:
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//iframe")));
driver.switchTo().frame(driver.findElement(By.xpath("//iframe")));
List<WebElement> elements = driver.findElements(By.cssSelector("table td.real_table_col1 a"));
System.out.println("Elements: " elements.size());
for(WebElement element : elements)
{
String url = element.getAttribute("href");
System.out.println(url);
}
也不是像硬編碼的暫停
Thread.sleep(3000);
你應該使用ExpectedConditions類似的東西
WebdriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("a.consent-banner--accept.button.submit")));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/424683.html
標籤:硒网络驱动程序
