Selenium能够访问findElement位于flex框下的元素,但无法对这些元素执行任何操作。下面我提供了几个示例网站以供详细了解,
网站:https : //condos.ca/
HTML片段:
<div class="styles___SearchField-sc-ntshwn-1 azZjo">
<div class="styles___SiteSearch-sc-ntshwn-3 bvlPAF">
<div class="styles___InputIcon-sc-ntshwn-4 eAuylQ">
<svg viewBox="0 0 59.93 60" class="styles___Svg-sc-14upfal-0 frvNPk svg-icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="width: 20px; height: 20px;">
<path d="M59.23,55.73L44.33,40.81a25,25,0,1,0-3.53,3.54L55.7,59.27A2.5,2.5,0,1,0,59.23,55.73ZM5,25A20,20,0,1,1,25,45,20,20,0,0,1,5,25Z" transform="translate(-0.03)"></path>
</svg>
</div>
<input aria-label="Search by address, Neighbourhood, MLS #" placeholder="Search by address, Neighbourhood, MLS #" id="search-input">
</div>
<div class="styles___GetLocationContainer-sc-ntshwn-5 cCBUUE">
<button target="_blank" name="search nearby button" class="styles___AppButton-sc-5pk18n-0 jXQNUT styles___SearchNearby-sc-ntshwn-6 dYpkAS" id="">
<svg viewBox="0 0 20 20" class="styles___Svg-sc-14upfal-0 frvNPk svg-icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" …Run Code Online (Sandbox Code Playgroud)我一直在尝试禁用控制台的调试消息,但无论我做什么,它仍然显示在控制台上。我需要找到一种方法来禁用控制台上 HTTP 请求和响应的持续日志记录。使用的代码:
System.setProperty(ChromeDriverService.CHROME_DRIVER_SILENT_OUTPUT_PROPERTY, "true");
java.util.logging.Logger.getLogger("org.openqa.selenium").setLevel(Level.SEVERE);
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadPath);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", chromePrefs);
options.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
options.setCapability(ChromeOptions.CAPABILITY, options);
// options.setCapability(ChromeOptions.CAPABILITY, options);
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
options.addArguments("--disable-logging");
options.addArguments("--log-level=3");
options.addArguments("--silent");
options.setCapability( "goog:loggingPrefs", logPrefs );
options.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
options.setAcceptInsecureCerts(true);
System.out.println("Launching Google Chrome Browser");
//ChromeDriverManager.getInstance(CHROME).setup();
WebDriverManager.chromedriver().setup();
// options.merge(cap);
driver = new ChromeDriver(options);
driver.manage().timeouts().implicitlyWait(TimeOut,TimeUnit.SECONDS);
driver.manage().window().maximize();
Run Code Online (Sandbox Code Playgroud)
在控制台上
Request DefaultHttpRequest(decodeResult: success, version: HTTP/1.1)
POST /session HTTP/1.1
User-Agent: selenium/4.0.0 (java windows)
Content-Length: 1259
Content-Type: application/json; charset=utf-8 …Run Code Online (Sandbox Code Playgroud) 我可以通过切换到每个选项卡来获取所有打开的选项卡标题。就像下面这样,
代码:
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
for(int i = 0; i < tabs.size(); i++) {
driver.switchTo().window(tabs.get(i));
System.out.println(driver.getTitle());
}
Run Code Online (Sandbox Code Playgroud)
输出:
Google
Home
Run Code Online (Sandbox Code Playgroud)
有没有什么办法可以不切换就获得所有的称号呢?像下面这样的东西,
for(String tab : tabs){
System.out.println(tab)
}
Run Code Online (Sandbox Code Playgroud)
但上面的代码返回选项卡 ID。
CDwindow-54AD3D4D73FFC6A60F79C1E56B131C2B
CDwindow-046B8E378703FEAAD1002BF3F835BAB7
Run Code Online (Sandbox Code Playgroud)