Can';t在python中使用webdriver单击元素

Can';t在python中使用webdriver单击元素,python,selenium,xpath,selenium-webdriver,webdriver,Python,Selenium,Xpath,Selenium Webdriver,Webdriver,我需要在python中使用SeleniumWebDriver单击元素的帮助 以下是供参考的html代码: 我正在尝试单击名为“系统”的元素 尝试使用link_text,id查找元素,但均无效 我也不确定我的xpath是否正确,我正在尝试学习。通过链接文本查找: 您可能还需要: 有多种方法可以使用selenium和python定位元素。在您的例子中,您可能会使用通过css\u选择器查找\u元素或通过xpath查找\u元素,您的HTML代码缩进有点难读,因此我假设body包含所有内容,并且ul所有l

我需要在python中使用SeleniumWebDriver单击元素的帮助

以下是供参考的html代码: 我正在尝试单击名为“系统”的元素

尝试使用link_text,id查找元素,但均无效

我也不确定我的xpath是否正确,我正在尝试学习。

通过链接文本查找:

您可能还需要:


有多种方法可以使用selenium和python定位元素。在您的例子中,您可能会使用通过css\u选择器查找\u元素通过xpath查找\u元素,您的HTML代码缩进有点难读,因此我假设body包含所有内容,并且ul所有li位于其下方。 我以Chrome为例,如果您使用的是Firefox,它本机由Selenium支持,这意味着您不需要像下面我为Chrome提供的那样提供Firefox路径

chrome = webdriver.Chrome('PathToChromeDriver.exe')
element = chrome.find_element_by_xpath("//body//ul//li[@id='system']")
或者,您可以通过在ui下请求第7个li元素来找到您的元素,这次,我在示例中使用的是Firefox

firefox = webdriver.Firefox()
element = firefox.find_element_by_xpath("//body//ul//li[7]")
我个人最喜欢的定位元素的方法是通过css选择器:

firefox = webdriver.Firefox()
element = firefox.find_element_by_css_selector("li[id='system']")
如果您有两个共享相同id的元素,例如id='system',您可以使用css选择器来精细选择您的元素,例如:

firefox = webdriver.Firefox()
element = firefox.find_element_by_css_selector("li[id='system'][style='right: 0px']")
基本上,您可以根据需要附加任意多个属性以唯一定位元素:

firefox = webdriver.Firefox()
element = firefox.find_element_by_css_selector("li[id='system'][style='right: 0px'][attribute3 = 'value'][attribute4 = 'value']")
以下是两个您可能会觉得有用的链接: 请尝试:

driver = webdriver.Firefox();

driver.findElement(By.id("SYSTEM")).click();
firefox = webdriver.Firefox()
element = firefox.find_element_by_css_selector("li[id='system']")
firefox = webdriver.Firefox()
element = firefox.find_element_by_css_selector("li[id='system'][style='right: 0px']")
firefox = webdriver.Firefox()
element = firefox.find_element_by_css_selector("li[id='system'][style='right: 0px'][attribute3 = 'value'][attribute4 = 'value']")
driver = webdriver.Firefox();

driver.findElement(By.id("SYSTEM")).click();