硒罐';通过Python使用find_元素时,无法找到元素

硒罐';通过Python使用find_元素时,无法找到元素,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,继续获取无法定位元素错误消息 xpath的第一个find元素很好,但第二个元素让我很为难 这是我的密码: import XLUtils from selenium import webdriver driver=webdriver.Chrome(executable_path="C:\Chrome_Driver\Chromedriver.exe") driver.get("https://www.canada.ca/en/revenue-agency/services/e-services/e

继续获取
无法定位元素
错误消息

xpath的第一个find元素很好,但第二个元素让我很为难

这是我的密码:

import XLUtils
from selenium import webdriver

driver=webdriver.Chrome(executable_path="C:\Chrome_Driver\Chromedriver.exe")
driver.get("https://www.canada.ca/en/revenue-agency/services/e-services/e-services-businesses/payroll-deductions-online-calculator.html")

driver.find_element_by_xpath('/html/body/main/div[1]/div[7]/p/a[1]').click()
driver.find_element_by_xpath('//*[@id="welcome_button_next"]').click()

您需要等待一段时间,才能出现
Next
按钮

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

wait = WebDriverWait(driver, 10)

e = wait.until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="welcome_button_next"]'))
    )
e.click()

要单击文本为“下一步”的元素,您需要引导WebDriverWait使该元素可单击,并且可以使用以下任一解决方案:

  • 使用
    CSS\u选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.btn.btn-primary#welcome_button_next"))).click()
    
  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='btn btn-primary' and @id="welcome_button_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
    

您不想在此处等待出现,然后单击。存在表示元素在DOM中,但不一定可见或可单击。您希望等待clickable。谢谢您的评论!真的很感激!您不想将XPath与那么多级别或索引一起使用,因为这会使它们变得脆弱(更容易损坏)。更好的第一个定位器是CSS选择器,
A.btn-primary
。对于第二个定位器,当您只有一个ID时,不要通过XPath查找。而是使用
。通过\u ID(“欢迎\u按钮\u下一步”)查找\u元素。
此外,您还需要将相关HTML添加到问题中。提供链接很好,但如果HTML在将来发生变化,问题将不再有用,也无法独立存在。与其用更多与现有答案几乎完全相同的答案“滥发”问题,不如帮助更正其他近乎完美的答案?谢谢您的评论!真的很感激@YoungwooJin如果我的答案符合您的问题,请单击我答案旁边的空心复选标记,该复选标记位于votedown箭头下方,以使复选标记变为绿色。