我试图用Python在Selenium中单击“下一步”按钮,其源代码为:
<div class="form-group clearfix">
<button id="experiment-method-previous" type="button" class="btn btn-dark pull-left" ng-click="navigate('run',$event)">Previous</button>
<button id="experiment-method-next" type="button" class="btn btn-primary pull-right" ng-click="navigate('export',$event)">Next</button>
</div>
我使用以下行:
driver.find_element_by_id('experiment-method-next')
但我收到此错误:
Unable to locate element: [id="experiment-method-next"]
与
相同driver.find_element_by_class_name('btn btn-primary pull-right')
Unable to locate element: .btn btn-primary pull-right
有什么想法吗?
答案 0 :(得分:2)
根据您共享的 HTML ,在元素上调用click()
,文本为 Next ,您必须诱使 WebDriverWait 为所需的元素可点击,您可以使用以下任一解决方案:
CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.btn-primary.pull-right#experiment-method-next"))).click()
XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn-primary pull-right' and @id='experiment-method-next']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
答案 1 :(得分:1)
我认为您的要素位于frame/iframe
内部。为了能够与frame/iframe
中的元素进行交互,您必须像这样切换其内容:
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//path_to_frame")))
然后您可以找到您的元素并与之交互:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "experiment-method-next"))).click()
,当您完成frame
中的内容后,您必须切换回默认内容:
driver.switch_to.default_content()
注意: ,您必须进行一些导入:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
PS: :如果您的元素不在框架内,则只需使用WebDriverWait
:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "experiment-method-next"))).click()
这将至少等待10秒钟,直到元素可单击并对其单击。希望这会有所帮助。
答案 2 :(得分:1)
我找到的解决方案是先杀死我的应用程序打开的所有以前的窗口,然后切换到最新的窗口:
current_window = driver.window_handles[1]
driver.switch_to_window(current_window)
现在,可以按以下方式单击“下一步”按钮:
driver.find_element_by_id('experiment-method-next').click
()
非常感谢用户 Andrei Suvorkov 和 DebanjanB 的帮助。