如何通过Selenium和Python按HTML单击引导按钮

2024-09-30 14:17:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用selenium脚本单击网页上的一个按钮,但使用这行代码时出现以下错误:

driver.find_element_by_class_name('btn-primary').click()

误差如下:

^{pr2}$

按钮元素的HTML:

<button type="submit" class="btn-primary btn-action bookButton" id="bookButton" data-track="FLT.RD.Book.Bottom"><span class="btn-label">Continue Booking</span></button>

Tags: 代码脚本网页driverselenium错误buttonelement
2条回答

尝试等待元素:

button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "bookButton")))
button.click()

它将等待至少10秒,直到元素可以单击。在

注意:您必须添加一些导出:

^{pr2}$

编辑:您也可以这样尝试js executor:

button = driver.find_element_by_id("bookButton")
driver.execute_script("arguments[0].click();", button)

如果按钮位于iframe/frame内,首先必须切换到这个frame,然后才能与此元素交互:

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME("frame_name"))))
# do your stuff
button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "bookButton")))
button.click()
driver.switch_to.default_content() # switch back to default content

根据您共享的HTML以及您提到的引导按钮,在您试图调用所需元素上的click()时,您需要诱导WebDriverWait,以便元素可单击,您可以使用以下任一解决方案:

  • CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn-primary.btn-action.bookButton#bookButton>span.btn-label"))).click()
    
  • XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn-primary btn-action bookButton' and @id='bookButton']/span[@class='btn-label'][contains(.,'Continue Booking')]"))).click()
    

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

相关问题 更多 >

    热门问题