Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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
如何使用Selenium在Python中单击扩展器按钮?_Python_Python 3.x_Selenium - Fatal编程技术网

如何使用Selenium在Python中单击扩展器按钮?

如何使用Selenium在Python中单击扩展器按钮?,python,python-3.x,selenium,Python,Python 3.x,Selenium,我正在为selenium编写一个脚本,打开一个网页,然后单击一系列按钮。第一个按钮是一个扩展按钮,如下图所示 下面是检查按钮的HTML代码,但按钮本身是“class=“dojoxExpandoIcon dojoxExpandoIconLeft qa button toc” 为了找到这个按钮,我一次一个地尝试下面的代码 driver.find_element_by_css_selector("div[class^='dojoxExpandoIcon']") # find

我正在为selenium编写一个脚本,打开一个网页,然后单击一系列按钮。第一个按钮是一个扩展按钮,如下图所示

下面是检查按钮的HTML代码,但按钮本身是“class=“dojoxExpandoIcon dojoxExpandoIconLeft qa button toc”

为了找到这个按钮,我一次一个地尝试下面的代码

driver.find_element_by_css_selector("div[class^='dojoxExpandoIcon']")    # find expander by class name
# driver.find_element_by_css_selector("div[class^='dojoxExpandoIcon dojoxExpandoIconLeft qa-button-toc']")    # find expander by class name
# driver.find_element_by_css_selector("div.dojoxExpandoContainer")
但是,它们都不起作用,并导致错误,例如

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"div.dojoxExpandoIcon.dojoxExpandoIconLeft.qa-button-toc"}

这里有什么我做错的吗?

请尝试等待,直到可以单击定位器:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 15)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".dojoxExpandoIcon.dojoxExpandoIconLeft.qa-button-toc")))
button = driver.find_element_by_css_selector(".dojoxExpandoIcon.dojoxExpandoIconLeft.qa-button-toc").click()
如果类的数量不稳定,请删除正在更改的类,只保留稳定的类,例如:

.dojoxExpandoIconLeft.qa-button-toc
在这里,我刚刚删除了一个类


阅读更多关于等待的信息。

是否有iframe?请check@cruisepandey没有iframe。如果有帮助的话,我在页面上添加了下拉列表的完整xpath。这种方法与使用time.sleep有什么不同吗?我通常给网页至少30秒的时间打开。sleep(30)它基本上会在代码中执行下一步之前暂停。这是非常不同的。它会等待元素被找到,然后在找到元素后立即单击。因此,它基本上节省了您的时间,具有成本效益。加载页面通常需要30秒,然后将显式等待时间更改为15到30秒。@user18139您的问题解决了吗?不,是的不起作用。由于无法定位元素,我得到了堆栈跟踪异常超时。我被难住了。HTML代码在那里……有没有办法通过x_路径而不是CSS来完成?我在代码中添加了完整的xpath。好的,更好地添加完整的HTML。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 15)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".dojoxExpandoIcon.dojoxExpandoIconLeft.qa-button-toc")))
button = driver.find_element_by_css_selector(".dojoxExpandoIcon.dojoxExpandoIconLeft.qa-button-toc").click()
.dojoxExpandoIconLeft.qa-button-toc