无论使用何种方法,都无法可靠地选择元素

2024-10-04 11:33:02 发布

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

我正在尝试选择[此网页](https://www.dukascopy.com/swiss/english/marketwatch/historical/)上的“专业”按钮

我可以切换到包含此元素的iframe,但尝试使用元素的xpath、id或类名单击所有元素都会导致在同一列中选择一个看似随机的按钮。下面是我正在使用的当前代码以及检查按钮的屏幕截图

majorforexbutton = driver.find_element_by_xpath('/html/body/div[9]/div[1]/div[3]/ul/li[4]')
majorforexbutton.click()

截图:

screenshot


Tags: httpsdivcom元素网页english专业www
2条回答

试着抓住你的元素并尝试底部的任何一个

elem = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.ID, ":5x")))

其中1项:

elem.click()

driver.execute_script("arguments[0].click();", elem)

文本为Majors字段的元素位于<iframe>内,因此您必须:

  • 诱导WebDriverWait使所需的帧可用,并切换到它

  • 诱导WebDriverWait使所需的元素可单击

  • 您可以使用以下任一Locator Strategies

    • 使用CSS_SELECTOR

      driver.get('https://www.dukascopy.com/swiss/english/marketwatch/historical/')
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src*='freeserv.dukascopy.com/2.0/?path=historical_data_feed']")))
      driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[text()='Instrument']"))))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "li[data-group='FX_MAJORS'][data-parent='FX']"))).click()
      
    • 使用XPATH

      driver.get('https://www.dukascopy.com/swiss/english/marketwatch/historical/')
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[contains(@src, 'freeserv.dukascopy.com/2.0/?path=historical_data_feed')]")))
      driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[text()='Instrument']"))))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li[text()='Majors']"))).click()
      
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

Major


参考文献

您可以在以下内容中找到一些相关讨论:

相关问题 更多 >