大家好~我用selenium自动填写qq邮箱用户名和密码,但是报错了,我的流程是这样的,首先点击页面的QQ登录按钮:
然后页面会出现我已经登陆的微信头像,但是我并不想选择点击头像登录,我想点击下面的账号密码登录:
然后我再定位输入框,输入账号和密码,全文如下:
```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)
然后报错了:


请大神帮忙看一下,我知道我的代码很不规范等等各种问题,请轻拍,感谢~~~
报错的图没上传成功,在这里补一下:
```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)
希望这可以帮助您解决问题。