Как решить «selenium.common.exceptions.NoSuchElementExceptio» в селене при создании твиттер-бота?

Я пытаюсь создать твиттер-бота и застреваю на странице входа в систему.
Вот мой код:

from bs4 import BeautifulSoup
import requests
import random 
import datetime
from datetime import timedelta
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import schedule

chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')


driver = webdriver.Chrome(options=chrome_options)

driver.get("https://twitter.com/i/flow/login")
# for twitter
driver.find_element(By.XPATH,'/html/body/div/div/div/div[1]/div/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div/div/div/div[5]').click()

Я всегда получаю указанную ниже ошибку:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div/div/div/div[1]/div/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div/div/div/div[5]"}
  (Session info: chrome=91.0.4472.101)
Stacktrace:
#0 0x55f817605919 <unknown>

Я пробовал это с css_selector, xpath, class, ID, но ничего не работает. Я не могу нажать на поле, чтобы ввести свой адрес электронной почты и пароль.

Может кто-нибудь показать мне, как решить эту ошибку.

К вашему сведению: если какой-то ответ был полезен, вы также можете проголосовать за него. Это можно сделать для нескольких ответов.

Prophet 15.12.2022 20:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В основном это происходит из-за того, что элемент не загружается полностью, когда вы пытаетесь щелкнуть по нему. Одна вещь, которую вы можете сделать, это установить временной сон после получения URL-адреса, чтобы дождаться загрузки страницы, а затем попытаться найти элемент. как код ниже:

driver.get("https://twitter.com/i/flow/login")
time.sleep(3)
driver.find_element(By.XPATH,'/html/body/div/div/div/div[1]/div/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div/div/div/div[5]').click()
Ответ принят как подходящий

Есть несколько проблем с вашим кодом:

  1. Вам нужно дождаться, пока элемент станет кликабельным, прежде чем обращаться к нему. Лучший способ сделать это — использовать WebDriverWaitexpected_conditions явное ожидание.
  2. Вы никогда не должны использовать абсолютные пути в качестве локаторов. Эти локаторы очень хрупкие. Вместо этого следует использовать короткие уникальные локаторы.
  3. Элемент, который вы пытаетесь щелкнуть, не является элементом, на который следует щелкнуть.

Работает следующий код:

from selenium import webdriver
from selenium.webdriver import ActionChains
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")

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

wait = WebDriverWait(driver, 20)
actions = ActionChains(driver)

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

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[autocomplete='username']"))).click()

Результат

Другие вопросы по теме