python selenium登录qq邮箱遇到问题

大家好~我用selenium自动填写qq邮箱用户名和密码,但是报错了,我的流程是这样的,首先点击页面的QQ登录按钮:

img

然后页面会出现我已经登陆的微信头像,但是我并不想选择点击头像登录,我想点击下面的账号密码登录:

img

然后我再定位输入框,输入账号和密码,全文如下:


```python
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
browser = webdriver.Chrome()
browser.get('https://mail.qq.com')
sleep(5)
qqlogin = browser.find_element(By.ID, 'qqLoginTab')  #QQ登录
qqlogin.click()
sleep(5)
try:
    name = browser.find_elements(By.TAG_NAME,'input')[0]   #如果有输入账号密码的地方则直接输入
    sleep(5)
except:
    plogin = browser.find_element(By.ID,'switcher_plogin')   #如果没有输入账号密码的地方则点击下面的“账号密码登录”
    plogin.click()
    sleep(5)
    name = browser.find_elements(By.TAG_NAME,'input')[0]
name.send_keys('xxxxxxxxx@qq.com')  #输入账号
passw = browser.find_element(By.ID,'p')
passw.send_keys('xxxxxxxxxxxx')   #输入密码
passw.submit()
sleep(5)
newurl = browser.switch_to_window(browser.current_window_handle)  #获取登录后的邮箱页面url
print(newurl)


然后报错了:

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/130762042876155.png "#left")

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/039682042876143.png "#left")


请大神帮忙看一下,我知道我的代码很不规范等等各种问题,请轻拍,感谢~~~

报错的图没上传成功,在这里补一下:


```python
ElementNotInteractableException           Traceback (most recent call last)
Input In [12], in <cell line: 20>()
     18     name = browser.find_elements(By.TAG_NAME,'input')[0]
     19     print("2:",name)
---> 20 name.send_keys('1325944801@qq.com')
     21 passw = browser.find_element(By.ID,'p')
     22 passw.send_keys('samanthawoshizy')

File ~/opt/anaconda3/lib/python3.9/site-packages/selenium/webdriver/remote/webelement.py:230, in WebElement.send_keys(self, *value)
    227             remote_files.append(self._upload(file))
    228         value = "\n".join(remote_files)
--> 230 self._execute(
    231     Command.SEND_KEYS_TO_ELEMENT, {"text": "".join(keys_to_typing(value)), "value": keys_to_typing(value)}
    232 )

File ~/opt/anaconda3/lib/python3.9/site-packages/selenium/webdriver/remote/webelement.py:403, in WebElement._execute(self, command, params)
    401     params = {}
    402 params["id"] = self._id
--> 403 return self._parent.execute(command, params)

File ~/opt/anaconda3/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py:440, in WebDriver.execute(self, driver_command, params)
    438 response = self.command_executor.execute(driver_command, params)
    439 if response:
--> 440     self.error_handler.check_response(response)
    441     response["value"] = self._unwrap_value(response.get("value", None))
    442     return response

File ~/opt/anaconda3/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py:245, in ErrorHandler.check_response(self, response)
    243         alert_text = value["alert"].get("text")
    244     raise exception_class(message, screen, stacktrace, alert_text)  # type: ignore[call-arg]  # mypy is not smart enough here
--> 245 raise exception_class(message, screen, stacktrace)

ElementNotInteractableException: Message: element not interactable
  (Session info: chrome=106.0.5249.119)
Stacktrace:
0   chromedriver                        0x00000001025aa598 chromedriver + 4404632
1   chromedriver                        0x0000000102531fa3 chromedriver + 3911587
2   chromedriver                        0x00000001021ded20 chromedriver + 425248
3   chromedriver                        0x0000000102210e5f chromedriver + 630367
4   chromedriver                        0x0000000102210402 chromedriver + 627714
5   chromedriver                        0x0000000102234da2 chromedriver + 777634
6   chromedriver                        0x000000010220b465 chromedriver + 607333
7   chromedriver                        0x0000000102234efe chromedriver + 777982
8   chromedriver                        0x000000010224bf79 chromedriver + 872313
9   chromedriver                        0x0000000102234bd3 chromedriver + 777171
10  chromedriver                        0x0000000102209ced chromedriver + 601325
11  chromedriver                        0x000000010220ae51 chromedriver + 605777
12  chromedriver                        0x000000010257a0ce chromedriver + 4206798
13  chromedriver                        0x000000010257e797 chromedriver + 4224919
14  chromedriver                        0x0000000102585a4f chromedriver + 4254287
15  chromedriver                        0x000000010257f4da chromedriver + 4228314
16  chromedriver                        0x000000010255823f chromedriver + 4067903
17  chromedriver                        0x000000010259c6a8 chromedriver + 4347560
18  chromedriver                        0x000000010259c816 chromedriver + 4347926
19  chromedriver                        0x00000001025b18fe chromedriver + 4434174
20  libsystem_pthread.dylib             0x00007ff8036554e1 _pthread_start + 125
21  libsystem_pthread.dylib             0x00007ff803650f6b thread_start + 15


```

该回答引用GPTᴼᴾᴱᴺᴬᴵ
看起来您的代码中有一个问题是,当您尝试在输入框中输入邮箱地址和密码时,可能会遇到“ElementNotInteractableException”的错误。这可能是因为在输入文本之前页面元素没有完全加载,或者您的输入元素被其他元素覆盖。您可以尝试使用显式等待来确保元素可见并可交互,或者使用模拟鼠标动作(例如模拟点击,键盘按键等)来与元素进行交互。

以下是一个示例代码,其中使用了显式等待来等待元素可见,并使用模拟按键的方式进行输入:

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
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get('https://mail.qq.com')

wait = WebDriverWait(browser, 10)

# 点击QQ登录标签
qqlogin = wait.until(EC.presence_of_element_located((By.ID, 'switcher_plogin')))
qqlogin.click()

# 输入用户名和密码
wait.until(EC.presence_of_element_located((By.ID, 'u')))
name = browser.find_element(By.ID, 'u')
name.send_keys('xxxxxxxxx@qq.com')
passw = browser.find_element(By.ID,'p')
passw.send_keys('xxxxxxxxxxxx')

# 模拟回车键进行提交
passw.send_keys(Keys.RETURN)

# 等待登录完成
wait.until(EC.title_contains('QQ邮箱'))

# 获取登录后的邮箱页面url
newurl = browser.current_url
print(newurl)


希望这可以帮助您解决问题。