Python 如何从具有相同标识选择器的表中选择按钮?
我正在尝试在有两个登录按钮的页面上自动登录 一般来说,我对编码还是个新手,但我读到Python 如何从具有相同标识选择器的表中选择按钮?,python,selenium,Python,Selenium,我正在尝试在有两个登录按钮的页面上自动登录 一般来说,我对编码还是个新手,但我读到xpath是一个不错的选择 browser.find_element_by_xpath("//input[@type='submit' and @value='Login']".click() 但是,这默认为第一个登录按钮。我应该使用什么选择器来选择第二个按钮 以下是html的代码: 谢谢如果元素不止一个,您可以在端点定位器处使用count[],如下所示: (//input[@type='submit' an
xpath
是一个不错的选择
browser.find_element_by_xpath("//input[@type='submit' and @value='Login']".click()
但是,这默认为第一个登录按钮。我应该使用什么选择器来选择第二个按钮
以下是html的代码:
谢谢如果元素不止一个,您可以在端点定位器处使用count
[]
,如下所示:
(//input[@type='submit' and @value='Login'])[2]
这是第二个元素:
browser.find_element_by_xpath("(//input[@type='submit' and @value='Login'])[2]").click()
有很多方法可以做到这一点。因为您选择的是最后一个按钮。您可以使用索引,如
(//input[@value='Login'])[last()]
选项1:
browser.find_element_by_xpath("(//input[@value='Login'])[last()]").click()
选项2
您可以使用表cell的引用,xpath将是
//td[@id='domainlogin_domain_selection']/following::td[1]/input[@value='Login']
所以点击按钮
browser.find_element_by_xpath("//td[@id='domainlogin_domain_selection']/following::td[1]/input[@value='Login']").click()
要处理动态元素,请使用WebDriverWait
和element\u To\u clickable
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"//td[@id='domainlogin_domain_selection']/following::td[1]/input[@value='Login']"))).click()
或
注意:使用WebDriverWait时需要导入以下内容
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
考虑使用css attribute=value选择器和*contains操作符,通过元素的
onclick
属性来定位元素。简洁明了,易于阅读
browser.find_element_by_css_selector("[onclick*=domainlogin]").click()
参考:
请尝试此代码以单击第二个登录按钮
browser.find_element_by_xpath("(//input[@value='Login'])[last()]").click()
或
按钮具有不同的值,因此您可以使用以下选择器(假设使用XPath函数):
//input[@type='submit' and @value='Login' and contains(@onclick, 'userLogin')]
//input[@type='submit' and @value='Login' and contains(@onclick, 'domainLogin')]
通过xpath查找\u元素
这是带有s的元素。如果有两个被同一个xapth标识,它将返回一个列表。然后可以检查列表是否有两个元素。如果是这样,您可以通过xpath(…)[-1]执行查找\u元素。单击()
获取最后一个元素
//input[@type='submit' and @value='Login' and contains(@onclick, 'userLogin')]
//input[@type='submit' and @value='Login' and contains(@onclick, 'domainLogin')]