如何用Selenium点击此按钮但ID不是唯一的
<button value="1" class="_42ft _4jy0 layerConfirm uiOverlayButton _4jy3 _4jy1 selected _51sy" type="submit">Confirm</button>
以上是Facebook页面上按钮的html代码。我想在硒的网络驱动程序帮助点击此按钮,但标签的ID改变在每次刷新时如何用Selenium点击此按钮但ID不是唯一的
谢谢大家的帮助,但我已经解决了这个与大家的帮助人和试验和错误。
可以使用固定的类名该
driver.findElement(By.className("layerConfirm"));
或联合
driver.findElement(By.cssSelector(".layerConfirm.uiOverlayButton"));
如果动态ID具有固定的一部分,您可以使用部分ID
// id=someid134313
driver.findElement(By.cssSelector("[id*='someid']"));
或者通过“确认”文本
driver.findElement(By.xpath("//button[contains(., 'Confirm')]"));
在最后一个,当我使用.Click()操作,它说元素不可见 –
由于Facebook元素的类和id是动态的,您将无法使用Selenium进一步自动化。
在这种情况下,你可以使用XPath
//button[@type='submit' and text()='Confirm']
或
//button[text()='Confirm']
没有工作抱歉。 –
去您可以使用下面的XPath对于您的情况:
driver.findElement(By.xpath("//*[contains(text(),'Confirm')]")).click();
希望它会帮助你。
使用ExplicitWait
,直到你的元素的可见性,然后进行单击
WebDriverWait wait = new WebDriverWait(driver,60);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//button[@type='submit'][normalize-space()='Confirm']")));
driver.findElement(By.xpath("//button[@type='submit'][normalize-space()='Confirm']")).click();
另一种解决方案可能是,如果一些JavaScript阻止你点击按钮,然后在下面JavascriptExecutor
代码使用,并让我知道如果任何问题
WebElement button = driver.findElement(By.xpath("//button[@type='submit'][normalize-space()='Confirm']"));
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", button);
谢谢,但我得到了另一种解决我的问题的方法,这个方法简单得多。 –
此按钮标记中的“id”在哪里? –
id来自代码中的上一行,每次页面刷新时都会更改 –
如果您想要'page_button = browser.find_element(By.XPATH,“// button [text()='确认']“)。点击()' – Thomas