Перейти к содержимому

Фотография

Selenium не находит элементы


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1 Vitaliy_S

Vitaliy_S

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Виталий

Отправлено 27 февраля 2020 - 09:05

Добрый день!

 

Настраиваю автоматизацию в одном из сервисов Google (AdWords).

Страница загружается полностью (окно развёрнутое), элементы находятся в DOM Inspector - Selenium их не находит.

Вывожу код через функцию

driver.page_source 
from selenium import webdriver
...
driver.get('https://ads.google.com/aw/...')
driver.implicitly_wait(60)
print(driver.page_source)

код выводится урезанный, необходимых элементов нет. Пробовал через Chrome и Firefox.

 

Подскажите в каком направлении искать решение? Направьте на путь истинный)

 

Python 3.8

Selenium 3.141.0

ChromeDriver 80.0.3987.106

geckodriver-v0.26.0


  • 0

#2 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 28 февраля 2020 - 03:30

используйте

  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector
  •  

https://selenium-pyt...g-elements.html

 

забудьте про getPageSource 


  • 0

#3 Vitaliy_S

Vitaliy_S

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Виталий

Отправлено 28 февраля 2020 - 07:04

используйте

  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector
  •  

https://selenium-pyt...g-elements.html

 

забудьте про getPageSource 

Конечно я использую данные методы. Искал по:

  • find_element_by_xpath
  • find_element_by_css_selector
  • find_element_by_class_name

driver.page_source - мне нужен был для понятия по какому коду ищет Selenium

Код полученный с помощью driver.page_source отличается (не хватает блоков в которых присутствуют необходимые элементы) от кода в ChromeDriver, при этом страница загружена полностью со всеми элементами


  • 0

#4 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 04 марта 2020 - 01:53

используйте девтулз для генерации selector или xpath для тех элементов которые вам нужны а не page_source


  • 0

#5 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 04 марта 2020 - 06:23

используйте девтулз для генерации selector или xpath для тех элементов которые вам нужны а не page_source

Не используйте девтулз, они генерят какой-то неюзабельный трэш


  • 0

#6 Vitaliy_S

Vitaliy_S

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Виталий

Отправлено 04 марта 2020 - 08:30

используйте девтулз для генерации selector или xpath для тех элементов которые вам нужны а не page_source

Сергей, или я не понимаю что вы хотите мне донести, или вы не поняли мой вопрос.
 
 
1. При поиске элементов я использовал: 
  • find_element_by_xpath
  • find_element_by_css_selector
  • find_element_by_class_name
На этапе поиска "page_source" не участвует, его в коде нет. Selenium элемент не находит, страница загружается полностью, в Chrome DevTools элемент есть, размер окна максимальный, driver.implicitly_wait(60)
 
Строка поиска элемента имеет вид:
balance = driver.find_element_by_xpath("//div[@class='b3-balance-card b3id-plp-balance-card']//div[@class='b3-balance-card-headline']").text
 
2. Вывожу код с помощью "page_source". В этом коде нет блока в котором присутствуют нужные мне элементы.
 
В этом и вопрос, почему при использовании функции "page_source" я не вижу этих элементов (страница загружена полностью)?

  • 0

#7 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 04 марта 2020 - 09:29

В этом и вопрос, почему при использовании функции "page_source" я не вижу этих элементов (страница загружена полностью)?

page_source != DOM

Эти элементы подгружаются джаваскриптом позже, так что в исходном коде страницы их нет.
  • 0

#8 Vitaliy_S

Vitaliy_S

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Виталий

Отправлено 04 марта 2020 - 09:53

 

В этом и вопрос, почему при использовании функции "page_source" я не вижу этих элементов (страница загружена полностью)?

page_source != DOM

Эти элементы подгружаются джаваскриптом позже, так что в исходном коде страницы их нет.

 

По этой причине Selenium их не находит, такое возможно?


  • 0

#9 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 04 марта 2020 - 10:17

По этой причине Selenium их не находит, такое возможно?

Скажем так, это не исключено.
  • 0

#10 Vitaliy_S

Vitaliy_S

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Виталий

Отправлено 04 марта 2020 - 10:52

 

По этой причине Selenium их не находит, такое возможно?

Скажем так, это не исключено.

 

Благодарю за подсказку, изучу вопрос в этом направлении


  • 0

#11 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 04 марта 2020 - 18:51

не находит потому что плохой локатор

дев тулз файрбаг и т.д. все предлагают проверять ими же сгенеророванные локаторы

я просто предложил 

это сделать и уже проверенные локаторы использовать ве коде 

про pagesource обсудили с ним надеюсь ясно все

 

кстати вместо page_source вы наверное имели в виду  getAttribute("outerHTML")


  • 0

#12 Vitaliy_S

Vitaliy_S

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Виталий

Отправлено 05 марта 2020 - 09:57

Решение найдено!

 

Код body помещён в iframe:

<iframe
<body
...
</body>
</iframe>

Для прочтения кода во фрейме применил функцию driver.switch_to.frame()

 

Искомые элементы найдены, всех благодарю за участие в поиске решения :smile:


  • 0

#13 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 06 марта 2020 - 18:40

Решение найдено!

 

Код body помещён в iframe:

<iframe
<body
...
</body>
</iframe>

Для прочтения кода во фрейме применил функцию driver.switch_to.frame()

 

Искомые элементы найдены, всех благодарю за участие в поиске решения :smile:ра

рад за вас хотя помоему фрейм это как бы basic answer


  • 0

#14 Creep2310

Creep2310

    Новый участник

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Тагизаде Али

Отправлено 06 марта 2022 - 07:35

Спасибо за ответ! Я мучился с сайтом 4 дня подряд, оказывается это из-за фрейма. СПАСИБО!!!


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных