Я попробовал как селен, так и драматург для автоматизации, но ни один подход не работал надежно общим способом. Любые советы, обходной путь или альтернативная стратегия будут высоко оценены. < /P>
ниже я пробовал. Здесь я хочу нажать на флажок is_widget для команды St.balloons, как показано на желтом. Фактический нажимает на столбец рейтинга с текстом, как 5, как указано в Red
Код: Выделить всё
public class TestStreamlitGrid
{
private WebDriver driver;
private WebDriverWait wait;
public static void main(String[] args)
{
TestStreamlitGrid grid = new TestStreamlitGrid();
grid.init();
grid.click();
}
private void init()
{
System.setProperty("webdriver.chrome.driver",
"C:\\D_Drive\\chromedriver\\137\\chromedriver-win64\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("incognito");
driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
wait = new WebDriverWait(driver, 120);
try
{
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("https://doc-data-editor.streamlit.app/?utm_medium=oembed&");
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void click()
{
try
{
JavascriptExecutor js = (JavascriptExecutor) driver;
Boolean isInIFrame = !(Boolean) js.executeScript("return window.top === window.self;");;
if(!isInIFrame)
{
WebElement frame = driver.findElement(By.xpath("//iframe[@title='streamlitApp']"));
driver.switchTo().frame(frame);
}
WebElement grid = driver.findElement(By.xpath(".//*[@data-testid='data-grid-canvas']"));
System.out.println(grid);
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView({block: 'center'});", grid);
WebElement tr = driver.findElement(By.xpath(
"//table[@role='grid']/descendant::tbody/tr/td[text()='st.balloons']/parent::tr"));
String rowIndex = tr.getAttribute("aria-rowindex");
WebElement column = driver
.findElement(By.xpath("//table[@role='grid']/descendant::thead/tr/th[text()='is_widget']"));
String columnIndex = column.getAttribute("aria-colindex");
WebElement select = driver
.findElement(By.xpath("//table[@role='grid']/descendant::tbody/tr[@aria-rowindex='" + rowIndex
+ "']/td[@aria-colindex='" + columnIndex + "']"));
new Actions(driver).moveToElement(grid, select.getLocation().getX(), select.getLocation().getY()).click()
.sendKeys(Keys.ENTER).build().perform();
}
catch (Exception e)
{
e.printStackTrace();
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... playwright