python - selenium 提交表单成功,依然报错问题
高洛峰
高洛峰 2017-04-18 09:14:02
0
2
505

我正在用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)
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(2)
黄舟

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.

#button = driver.find_element_by_class_name('zl_btn')
#time.sleep(3)
#button.click()
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal