我正在用selenium模拟登录一个网站,但是当我已经填写完成帐号密码后,他依然报错。我想知道为什么。
代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import os
from cut import cut_vcode
url = 'http://passport2.chaoxing.com/login?fid=1479&refer=http://i.mooc.chaoxing.com'
driver = webdriver.Firefox()
driver.get(url)
wait = WebDriverWait(driver, 10)
span = wait.until(EC.visibility_of_element_located((By.ID, "nameNoteId")))
span.click()
# 输入帐号
unameId = wait.until(EC.visibility_of_element_located((By.ID, "unameId")))
unameId.send_keys('XX')
# 密码
passwordId = wait.until(EC.visibility_of_element_located((By.ID, "passwordId")))
passwordId.send_keys('XXXXXX')
# 保存验证码图片
driver.set_window_size(1166, 741)
vcode_path = './main.png'
vcode_out_path = './main-cut.png'
driver.save_screenshot(vcode_path)
cut_vcode(vcode_path,vcode_out_path,430,343,502,374)
os.system('tesseract main-cut.png ./abc')
with open ('./abc.txt') as f:
CAPTCHA = f.read()
# 输入验证码
numcode = driver.find_element_by_id('numcode')
numcode.clear()
numcode.send_keys(CAPTCHA)
button = driver.find_element_by_class_name('zl_btn')
time.sleep(3)
button.click()
time.sleep(3)
print driver.title
# lession = driver.find_element_by_class_name('Mcon1img')
# lession.click()
time.sleep(10)
driver.close()
报错:
Traceback (most recent call last):
File "/Users/Ru/Desktop/erya/main.py", line 40, in <module>
button = driver.find_element_by_class_name('zl_btn')
File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 410, in find_element_by_class_name
return self.find_element(by=By.CLASS_NAME, value=name)
File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 744, in find_element
{'using': by, 'value': value})['value']
File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 233, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"class name","selector":"zl_btn"}
Stacktrace:
at FirefoxDriver.prototype.findElementInternal_ (file:///var/folders/pl/64qs2gdd2fzcn35z_gzcn4_r0000gn/T/tmpvbGemj/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)
at FirefoxDriver.prototype.findElement (file:///var/folders/pl/64qs2gdd2fzcn35z_gzcn4_r0000gn/T/tmpvbGemj/extensions/fxdriver@googlecode.com/components/driver-component.js:10779)
at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/pl/64qs2gdd2fzcn35z_gzcn4_r0000gn/T/tmpvbGemj/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
at DelayedCommand.prototype.executeInternal_ (file:///var/folders/pl/64qs2gdd2fzcn35z_gzcn4_r0000gn/T/tmpvbGemj/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
at DelayedCommand.prototype.execute/< (file:///var/folders/pl/64qs2gdd2fzcn35z_gzcn4_r0000gn/T/tmpvbGemj/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)
NoSuchElementException
Le message d'erreur est très clair Vous n'avez besoin d'aucun élément
Il me semble avoir découvert la raison. Lorsque j'ai essayé de commenter le code suivant, il n'a plus signalé d'erreur. L'erreur semble être la suivante : lorsque j'ai fini de saisir le code de vérification, il sera automatiquement soumis et passera à la page principale. Il n'est pas nécessaire de cliquer sur le bouton Soumettre.
Donc
class_name=zl_btn
est introuvable sur la page principale redirigée et une erreur est signalée.