Python Selenium WebDriver не может найти элемент вообще - PullRequest
0 голосов
/ 14 марта 2020

Веб-драйверу Selenium не удалось найти какие-либо элементы на странице, используя различные методы: имя_класса, идентификатор и & xpath.

Вот мой код:

from selenium import webdriver
##from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
import time
import random


chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")

driver = webdriver.Chrome(executable_path=r'C:\Users\acer\Downloads\chromedriver_win32\chromedriver.exe', chrome_options=chrome_options)
time.sleep(2)
driver.get('https://www.reddit.com/r/AskReddit/comments/fi04fh/what_are_some_spoilers_for_the_next_month_of_2020/')
time.sleep(2)
print(driver.title)
time.sleep(2)
element = driver.find_element_by_id("header")


print("done")

Название печатается успешно, но оно терпит неудачу на линии driver.find_element_by_id("header"). На самом деле, я пытаюсь найти элемент, класс которого «top-material» (используя find_by_class_name), но так как это не сработало, я проверил его для других элементов («header»), используя соответствующие методы («xpath», « id "), но ничего не работает для меня.

Кто-нибудь может дать некоторое представление о проблеме?

РЕДАКТИРОВАТЬ: Вот ошибка:

Traceback (most recent call last):
  File "C:/Python34/reddit_test.py", line 20, in <module>
    element = driver.find_element_by_id("header")
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 269, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 752, in find_element
    'value': value})['value']
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
    self.error_handler.check_response(response)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"header"}
  (Session info: headless chrome=80.0.3987.132)
  (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 6.1.7601 SP1 x86_64)

Вот доказательство того, что элемент существует .. . enter image description here

Ответы [ 2 ]

1 голос
/ 14 марта 2020

в вашем URL нет идентификатора заголовка

, чтобы игнорировать это исключение

попробуйте этот код:

from selenium import webdriver
##from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
import time
import random


chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")

driver = webdriver.Chrome(executable_path=r'C:\Users\acer\Downloads\chromedriver_win32\chromedriver.exe', chrome_options=chrome_options)
time.sleep(2)
driver.get('https://www.reddit.com/r/AskReddit/comments/fi04fh/what_are_some_spoilers_for_the_next_month_of_2020/')
time.sleep(2)
print(driver.title)
time.sleep(2)
try:
    element = driver.find_element_by_id("header")
except:
    print("The Header isd dose not exist!")
    exit()
print("done")

В вашем URL Заголовок - доза не существует

Вы можете видеть это изображение!

enter image description here

0 голосов
/ 14 марта 2020

Проблема заключалась в том, что я использовал старую версию reddit, тогда как по умолчанию, которую открывали Selenium и Hamza, это новая версия, которая не содержит элементов, которые я пытался найти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...