我需要帮助,在python中使用selenium webdriver点击一个元素。
这是html代码供参考: 我试图点击一个名为“SYSTEM”的元素
<body>
<div id="toparea">
<div id="logo" style="top: 10px; z-index: 3">
<div id="welcome">
<div id="topmenu1">
<ul>
<li id="home" class="selected" style="right: 636px">
<li id="incidents" style="right: 530px">
<li id="case" style="right: 424px">
<li id="capture" style="right: 318px">
<li id="policies" style="right: 212px">
<li id="classify" style="right: 106px">
<li id="system" style="right: 0px">
<a onclick="location.href='/imanager/ReShowMenuBar.do?selectedtab=system'" title="SYSTEM" target="mainFrame" href="/devicemgr/ReSystemAdministration.do">SYSTEM</a>
</li>
</ul>
我尝试使用:
driver.find_element_by_xpath("//*[@id='system']/a")
尝试使用link_text,id查找元素,但都是徒劳的。
我也不确定我的xpath是否正确,我正在努力学习。
答案 0 :(得分:4)
通过链接文字找到 :
driver.find_element_by_link_text("SYSTEM")
您可能还需要wait for the element to be clickable:
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
system = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "SYSTEM")))
system.click()
答案 1 :(得分:0)
使用selenium和python可以通过多种方式定位元素。在您的情况下,您可能会使用 find_element_by_css_selector 或 find_element_by_xpath ,您的HTML代码缩进有点难以阅读,所以我假设正文包含everthing和 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']")
以下是您可能会发现有用的两个链接: http://www.w3schools.com/xsl/xpath_syntax.asp http://www.w3schools.com/cssref/css_selectors.asp
答案 2 :(得分:0)
请尝试:
driver = webdriver.Firefox();
driver.findElement(By.id("SYSTEM")).click();