当find_elements找不到类时会发生什么?

时间:2019-12-10 04:38:53

标签: python selenium xpath

我正在尝试在网站上查找特定班级。该课程有时存在,有时则不存在。 因此,当存在该类时,脚本将花费几秒钟的时间来找到element(logo)。当该类不存在时,脚本会运行很长时间,然后结束。

那是为什么?该类不存在时,有什么方法可以加快速度?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep

chrome_path = r"C:\Users\peter\Desktop\chromedriver.exe"
driver = webdriver.Chrome(executable_path=r"C:\Users\peter\Desktop\chromedriver.exe")
driver.get("https://example.com/app/login")

driver.minimize_window()
driver.implicitly_wait(300)

input_email = driver.find_element_by_xpath("//input[@type='email']")
input_email.send_keys('example@gmail.com')

input_password = driver.find_element_by_xpath("//input[@type='password']")
input_password.send_keys('example')

click_login = driver.find_element_by_xpath("//button[@type='submit']")
click_login.click()

driver.find_element_by_id("schedule-today").click()
sleep(2)

logo = driver.find_elements_by_xpath( "//*[contains(@class, 'lbl_lesson_status label label-info lbl_lesson_open')]" );

if not logo:
 print("empty")

f = open("reserved_date", "a+")
for i in logo:
  opendate = i.get_attribute("data-t-start-local");
  f.write((opendate)+'\n')
  print(opendate)
driver.close()

1 个答案:

答案 0 :(得分:1)

例如,如果找不到元素,则需要添加等待并添加Try Except,并quit添加script

我只是为您编码!

尝试此代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import *
from selenium.webdriver.common.keys import Keys
import time

chrome_path = r"C:\Users\peter\Desktop\chromedriver.exe"
driver = webdriver.Chrome(executable_path=r"C:\Users\peter\Desktop\chromedriver.exe")
driver.get("https://example.com/app/login")
driver.minimize_window()


try: 
    input_email = WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//input[@type='email']")))
    input_email.send_keys('example@gmail.com')
except (TimeoutException,NoSuchElementException):
    print('There is No Email Input!')
    quit()

try:
    input_password = WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//input[@type='password']")))
    input_password.send_keys('example')
except (TimeoutException,NoSuchElementException):
    print('There is No Password Input!')
    quit()

try:
    click_login = WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//button[@type='submit']")))
    click_login.click()
except (TimeoutException,NoSuchElementException):
    print('There is No Login Button!')
    quit()



try:
    WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#schedule-today")))
    time.sleep(2)
except (TimeoutException,NoSuchElementException):
    print("Can't Find schedule-today id!")
    quit()


try:
    logo = WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//*[contains(@class, 'lbl_lesson_status label label-info lbl_lesson_open')]")))
    f = open("reserved_date", "a+")
    for i in logo:
      opendate = i.get_attribute("data-t-start-local");
      f.write((opendate)+'\n')
      print(opendate)
except (TimeoutException,NoSuchElementException):
    print("Can't Find Logo Button!")
    quit()

driver.close()