Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从具有相同标识选择器的表中选择按钮?_Python_Selenium - Fatal编程技术网

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')]