ooolinux 发表于 2025-4-10 18:28:12

这个selenium代码为什么无法登录?用户名密码正确的情况下

from selenium import webdriver

url='网址发不上来'

browser=webdriver.Firefox()
browser.get(url)
u=browser.find_element('name','membername')
ps=browser.find_element('name','memberpass')
u.send_keys('用户名')
ps.send_keys('密码')
sub=browser.find_element('name','Submit')
sub.click()

表现就是用户名和密码都自动填写了,sub.click()没有登录进去,同时用户名和密码框又被清空了

FishC 发表于 2025-4-10 18:29:02

可能原因及解决方案:

1. 页面加载延迟问题
建议添加显式等待,确保元素加载完成:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 替换原有定位代码为:
u = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.NAME, 'membername'))
)
ps = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.NAME, 'memberpass'))
)


2. iframe嵌套问题
如果登录框在iframe中,需要先切换:

iframe = browser.find_element(By.TAG_NAME, 'iframe')
browser.switch_to.frame(iframe)
# 再执行元素定位操作


3. 表单提交方式问题
尝试改用回车提交:

ps.send_keys('密码' + Keys.RETURN)

或改用表单提交:

browser.find_element(By.NAME, 'membername').submit()


4. 反爬检测问题
添加以下参数绕过自动化检测(Firefox示例):

from selenium.webdriver.firefox.options import Options

options = Options()
options.set_preference('dom.webdriver.enabled', False)
browser = webdriver.Firefox(options=options)


5. 验证失败清空输入框
在最后添加错误提示检测:

error = browser.find_elements(By.CLASS_NAME, 'error-tips')
if error:
    print(f"登录失败原因:{error.text}")


建议按顺序排查以上可能性,推荐优先尝试方案1+方案3的组合。如果仍有问题,可以查看页面是否有动态变化的参数需要处理(比如token值)。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

player-none 发表于 2025-4-10 18:31:08

网址去掉 https:// 发上来,我帮你试试

ooolinux 发表于 2025-4-10 18:49:55

player-none 发表于 2025-4-10 18:31
网址去掉 https:// 发上来,我帮你试试

按照这个解决了:
ps.send_keys('密码' + Keys.RETURN)
网址发不了,叫盒子论坛
页: [1]
查看完整版本: 这个selenium代码为什么无法登录?用户名密码正确的情况下