Python-Selenium无此类元素:找不到元素

sqxo8psd  于 2022-11-24  发布在  Python
关注(0)|答案(1)|浏览(177)

我是新的编码。我试图使一个twitter机器人,但当我找到XPath并粘贴到我的代码,它给出了一个错误
我试图找到具有id、name、selector的元素并将其粘贴到我的代码中,但它们都不起作用

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time


class TwitterBot:
    def __init__(self , username , password) :
        self.username = username
        self.password = password

        chrome_options = Options()
        self.bot = webdriver.Chrome(ChromeDriverManager().install() , options = chrome_options)

    def login(self):

        bot = self.bot
        bot.get("https://twitter.com/login")
        time.sleep(5)

        email = bot.find_element(By.XPATH , '/html[1]/body[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[5]/label[1]/div[1]/div[2]/div[1]/input[1]')
        email.send_keys(self.username)

        

f = TwitterBot("blabla" ,"blabla")
f.login()
vngu2lb8

vngu2lb81#

你需要学习如何创建正确的、短的和唯一的定位器。非常长的绝对XPath和CSS选择器是非常容易被破坏的。
您还需要使用WebDriverWaitexpected_conditions显式等待,而不是硬编码延迟。
下面的代码是有效的:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

options = Options()
options.add_argument("start-maximized")
options.add_argument('--disable-notifications')

webdriver_service = Service('C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(options=options, service=webdriver_service)
wait = WebDriverWait(driver, 20)

url = "https://twitter.com/login"
driver.get(url)

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[autocomplete='username']"))).send_keys("ku-ku")

其结果是:

相关问题