Python 如何使用Selenium单击此按钮?
以下是我根据“检查”尝试单击的元素的所有部分:Python 如何使用Selenium单击此按钮?,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,以下是我根据“检查”尝试单击的元素的所有部分: <div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"> ::before <div class="ui-dialog-buttonset"> <button type="button" class="done ui-button ui-corner-all ui-widget">
<div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix">
::before
<div class="ui-dialog-buttonset">
<button type="button" class="done ui-button ui-corner-all ui-widget">
Done</button>
</div>
::after
</div>
但我不明白为什么它是不可交互的。当我在inspector中悬停在它上面时,所有的。。。突出显示,所以我要单击的按钮必须在那里,对吗
以下是我尝试过的几件事:
browser.find_element_by_css_selector('button[type=button]').click()
browser.find_elements_by_xpath("//*[contains(text(), 'Done')]").click()
# The above returns a list for some reason?
browser.find_elements_by_css_selector('done.ui-button.ui-corner-all.ui-widget')
我希望我能记住我尝试过的所有内容,但无论如何,我希望有人能帮助我。要单击该元素,因为所需元素是一个动态元素,您必须诱导WebDriverWait使该元素可单击,并且您可以使用以下任一解决方案: 使用CSS_选择器: 使用XPATH: 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您可以在中找到详细的讨论
要单击该元素,因为所需元素是动态元素,您必须引导WebDriverWait使该元素可单击,并且您可以使用以下任一解决方案: 使用CSS_选择器: 使用XPATH: 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您可以在中找到详细的讨论
可以使用ActionChains移动到元素
from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_elements_by_css_selector("div.ui-dialog-buttonpane.ui-widget-content.ui-helper-clearfix")
actions = ActionChains(driver)
actions.move_to_element(element).perform()
或者,您可以使用scrollIntoView滚动直到元素显示在视图中:
driver.execute_script("arguments[0].scrollIntoView();", element)
可以使用ActionChains移动到元素
from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_elements_by_css_selector("div.ui-dialog-buttonpane.ui-widget-content.ui-helper-clearfix")
actions = ActionChains(driver)
actions.move_to_element(element).perform()
或者,您可以使用scrollIntoView滚动直到元素显示在视图中:
driver.execute_script("arguments[0].scrollIntoView();", element)
使用.find_元素时,请注意复数形式,它将返回一个列表,而不是像.find_元素单数形式那样返回单个元素。你试过了吗
browser.find_element_by_xpath("//button[.='Done']")
如果你得到了这些的len。查找元素调用。。。是1号吗?我想知道是否只有一个按钮与您正在使用的定位器相匹配,第一个按钮不可见,但您需要第二个或第三个按钮,等等。当您使用时。find\u elements注意复数它将返回一个列表,而不是像find\u element singular这样的单个元素。你试过了吗
browser.find_element_by_xpath("//button[.='Done']")
如果你得到了这些的len。查找元素调用。。。是1号吗?我想知道是否有一个以上的按钮与您正在使用的定位器匹配,第一个按钮不可见,但您需要第二个或第三个按钮,等等。如果可能,显示您的源代码页,否则其他人无法调试以提供帮助。此外,selenium可以执行脚本,您可以尝试使用javascript或jquery脚本使元素可交互,甚至可以使用它们执行所有步骤。当您使用.find_元素时,请注意复数形式,它将返回一个列表,而不是像.find_元素这样的单个元素。您是否尝试过浏览器。通过xpath//按钮[.='Done']查找元素?如果你得到了这些的len。查找元素调用。。。是1号吗?我想知道是否只有一个按钮与你使用的定位器匹配,第一个按钮不可见,但你想要第二个或第三个按钮,等等@JeffC Jeff我的朋友,你真的是我的英雄。我单击了列表中的一个特定元素,它工作得非常好。用这个回答问题,这样你就可以在给我答案的时候给你打勾。您应该得到一切。@jeepersmcface,请注意,在ElementNotVisibleException的情况下,这种方法使用find_elements。。应仅用于检查选择器匹配的元素数,而不用于按索引选择所需的元素。您仍应搜索唯一选择器。同意@Andersson。我猜表中有多个按钮,每个按钮位于不同的行上。您应该能够基于表中的值为给定按钮构造XPath。这是更好的方法。。。我的评论变成了答案,更像是一个调试步骤。好吧,它不必是表中的一行,这只是一个示例…如果可能,请显示您的源代码页,否则其他人无法调试以提供帮助。此外,selenium可以执行脚本,您可以尝试使用javascript或jquery脚本使元素可交互,甚至可以使用它们执行所有步骤。当您使用.find_元素时,请注意复数形式,它将返回一个列表,而不是像.find_元素这样的单个元素。您是否尝试过浏览器。通过xpath//按钮[.='Done']查找元素?如果你得到了这些的len。查找元素调用。。。是1号吗?我想知道是否只有一个按钮与你使用的定位器匹配,第一个按钮不可见,但你想要第二个或第三个按钮,等等@JeffC Jeff我的朋友,你真的是我的英雄。我单击了列表中的一个特定元素,它工作得非常好。用这个回答问题,这样你就可以在给我答案的时候给你打勾。您应该得到一切。@jeepersmcface,请注意,在ElementNotVisibleException的情况下,这种方法使用find_elements。。应仅用于检查选择器匹配的元素数,而不用于按索引选择所需的元素。您仍应搜索唯一选择器。同意@Andersson。我猜表中有多个按钮,每个按钮位于不同的行上。您应该能够基于表中的值为给定按钮构造XPath。这是更好的方法。。。我的评论变成了answ
er更像是一个调试步骤。嗯,它不必是表中的一行,这只是一个例子…嗯。。。我得到selenium.common.exceptions.TimeoutException:Message:签出更新的答案并让我知道状态HM。。。我得到selenium.common.exceptions.TimeoutException:Message:签出更新的答案并让我知道状态