2017-06-14 306 views
-2
<button value="1" class="_42ft _4jy0 layerConfirm uiOverlayButton _4jy3 _4jy1 selected _51sy" type="submit">Confirm</button> 

以上是Facebook页面上按钮的html代码。我想在硒的网络驱动程序帮助点击此按钮,但标签的ID改变在每次刷新时如何用Selenium点击此按钮但ID不是唯一的

Code on facebook website

谢谢大家的帮助,但我已经解决了这个与大家的帮助人和试验和错误。

+0

此按钮标记中的“id”在哪里? –

+0

id来自代码中的上一行,每次页面刷新时都会更改 –

+0

如果您想要'page_button = browser.find_element(By.XPATH,“// button [text()='确认']“)。点击()' – Thomas

回答

0

可以使用固定的类名该

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')]")); 
+0

在最后一个,当我使用.Click()操作,它说元素不可见 –

0

由于Facebook元素的类和id是动态的,您将无法使用Selenium进一步自动化。

在这种情况下,你可以使用XPath

//button[@type='submit' and text()='Confirm'] 

//button[text()='Confirm'] 
+0

没有工作抱歉。 –

0

去您可以使用下面的XPath对于您的情况:

driver.findElement(By.xpath("//*[contains(text(),'Confirm')]")).click(); 

希望它会帮助你。

0

使用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); 
+0

谢谢,但我得到了另一种解决我的问题的方法,这个方法简单得多。 –