Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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 如何使用Selenium单击此按钮?_Python_Selenium_Xpath_Css Selectors_Webdriverwait - Fatal编程技术网

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:签出更新的答案并让我知道状态