使用selenium模块自动记录Twitter,无法定位元素错误

问题描述 投票:0回答:3

您好,我正在尝试构建一个程序,通过使用带有 selenium 模块的用户名和密码信息自动登录 Twitter。我收到一个错误,基本上表明它找不到该元素。这是我写的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

username=""
password=""


driver=webdriver.Firefox(executable_path=r'C:\geckodriver-v0.31.0-win64\geckodriver.exe')
driver.get("https://twitter.com/i/flow/login")
usernameInput=driver.find_element(By.NAME,"text")

我也通过使用 xpath 而不是 name 应用了相同的过程,它也不起作用。我正在删除我获得名称标签的屏幕截图: SS

错误信息:

引发异常类(消息,屏幕,堆栈跟踪) selenium.common.exceptions.NoSuchElementException:消息:无法 定位元素:[name =“text”]堆栈跟踪: RemoteError@chrome://remote/content/shared/RemoteError.jsm:12:1 WebDriverError@chrome://remote/content/shared/webdriver/Errors.jsm:192:5 NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.jsm:404:5 元素.查找/

python python-3.x selenium-webdriver webdriver
3个回答
1
投票

这是一个时间问题。使用

WebDriverWait
,如下所示:

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

options = webdriver.ChromeOptions()
options.add_argument("--disable-notifications")
options.add_experimental_option(
    "excludeSwitches", ["enable-automation"],
)
prefs = {
    "credentials_enable_service": False,
    "profile.password_manager_enabled": False,
}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=options)
driver.get("https://twitter.com/i/flow/login")

element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, '[name="text"]'))
)
element.send_keys("MY_USERNAME")

time.sleep(3)  # Long enough to see the name was typed

driver.quit()

1
投票

你可以尝试使用这个xpath吗:

//span[text()='Phone, email address, or username']

如果这不起作用, 然后使用上面的Xpath,只需单击该字段,不传递文本。 然后在下一步中,使用以下方法传递值:

driver.find_element(By.XPATH,"//span[text()='Phone, email address, or username']").click()

usernameInput=driver.find_element(By.NAME,"text").send_keys(username)

0
投票

应该很简单地将密钥发送到该输入标签。

driver.find_element(By.XPATH,"//input[@autocomplete='username']").send_keys('user')
© www.soinside.com 2019 - 2024. All rights reserved.