硒找不到元素,但元素在https://login.aliexpress.com/网页

2024-06-03 15:25:39 发布

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

website上,selenium脚本找不到登录名和密码字段。我试图通过xpath、css选择器、名称和类名进行搜索。但什么也没用。在

from selenium import webdriver
from time import sleep
driver = webdriver.Firefox() 
driver.get("https://login.aliexpress.com/")
driver.find_element_by_id("fm-login-id").send_keys("test_id")
driver.find_element_by_id("fm-login-password").clear()
driver.find_element_by_id("fm-login-password").send_keys("test_pass")
driver.find_element_by_id("fm-login-submit").click()`

我尝试在Selenium IDE的帮助下完成这项工作,而且所有的工作都在GUI中进行。但是,在我将代码导出到python并运行它之后,程序给出了一个错误:它找不到元素。在


Tags: fromtestimportsendidbydriverselenium
2条回答

但是,由于所需元素位于<iframe>内,因此您必须:

  • 诱导WebDriverWait以获得所需的帧,然后切换到该帧。在
  • 诱导WebDriverWait所需的元素可点击。在
  • 您可以使用以下解决方案:

    • 使用CSS_SELECTOR

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
      driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
      driver.get("https://login.aliexpress.com/")
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#alibaba-login-box[src^='https://passport.aliexpress.com/mini_login.htm?']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.fm-text#fm-login-id"))).send_keys("test_id")
      driver.find_element_by_css_selector("input.fm-text#fm-login-password").send_keys("test_pass")
      driver.find_element_by_css_selector("input.fm-button#fm-login-submit").click()
      
  • 临时Broswer快照:

login_aliexpress_com

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

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 参考文献:

登录表单在框架内,您需要先切换到它。在

from selenium import webdriver
from time import sleep
driver = webdriver.Firefox() 
driver.get("https://login.aliexpress.com/")

frame = driver.find_element_by_id("alibaba-login-box")
driver.switch_to.frame(frame)

driver.find_element_by_id("fm-login-id").send_keys("test_id")
driver.find_element_by_id("fm-login-password").clear()
driver.find_element_by_id("fm-login-password").send_keys("test_pass")
driver.find_element_by_id("fm-login-submit").click()

相关问题 更多 >