Селениум Питон - вопрос

12 3
D
На сайте с 28.06.2008
Offline
1104
1626

Изучаю принципы парсинга через питон с использованием селениума.

Простые сайты подергал, проблем нет. Перешел к более сложным, вот пример кода

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

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

from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome("/root/chromedriver",chrome_options=chrome_options)

driver.get('https://kad.arbitr.ru/')
elem = driver.find_element_by_xpath("/html/body/div[1]/table/tbody/tr/td[1]/h1")
page = driver.page_source

print(element.text)
driver.quit()

Выдает пустую строку, хотя если вывести в принт page - то там есть h1

Что не так?

S3
На сайте с 29.03.2012
Online
322
#1
Скорее всего неправильно прописан путь к элементу. Также можно драйверами поиграться. Как вы определяли путь, в консоли смотрели?
S3
На сайте с 29.03.2012
Online
322
#2
Судя по коду должен давать ошибку
Как минимум надо print(elem.text)
D
На сайте с 28.06.2008
Offline
1104
#3
Sly32 #:
Судя по коду должен давать ошибку
Как минимум надо print(elem.text)

Это я уже тут ошибся. Путь до элемента копировал в браузере "Copy full XPath".

ПРобовал так же на этом сайте (kad.arbitr.ru) вытащить произвольный элемент по ID

elem = driver.find_element_by_id('element_id')

Тоже самое - пустая строка. Но я бы еще понял если бы там защита какая-то стояла, но ведь в driver.page_source весь код страницы попадает, почему тогда не находит отдельные элементы не понятно

S3
На сайте с 29.03.2012
Online
322
#4
Dram #:

Это я уже тут ошибся. Путь до элемента копировал в браузере "Copy full XPath".

ПРобовал так же на этом сайте (kad.arbitr.ru) вытащить произвольный элемент по ID

Тоже самое - пустая строка. Но я бы еще понял если бы там защита какая-то стояла, но ведь в driver.page_source весь код страницы попадает, почему тогда не находит отдельные элементы не понятно

все та же причина - неправильно прописан путь к элементу или название элемента.  И можешь поиграться с другими драйверами, например к мозилле

T7
На сайте с 19.09.2018
Offline
63
#5
Dram :
Выдает пустую строку, хотя если вывести в принт page - то там есть h1
print('innerHTML', elem.get_attribute("innerHTML"))

Ибо

.b-arbitr-header-title h1 {
        padding: 9px 0 0 10px;
        font-size: 15px;
        font-weight: normal;
        display: none;
}
D
На сайте с 28.06.2008
Offline
1104
#6
timo-71 спасибо! Теперь понятно, не думал сто селениум ксс учитывает
LEOnidUKG
На сайте с 25.11.2006
Offline
1745
#7
Dram #:
timo-71 спасибо! Теперь понятно, не думал сто селениум ксс учитывает

В этом и прикол использования селениум, что он эмулирует браузер. Если этого НЕ нужно, тогда он вообще зачем? Можно просто страницу тем же Питоном тягать и всё.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
W1
На сайте с 22.01.2021
Offline
305
#8
LEOnidUKG #:
Если этого НЕ нужно, тогда он вообще зачем?

Есть как бы 2 стороны: CSS и JS. На мой взгляд, для целей ТС было бы оптимально, если бы первое не учитывалось, а второе работало бы. Что бы было как в инструментах разработчика: видны все элементы после отрабатывания JS, независимо от CSS. Если просто "тягать страницу", то так не получится.

Мой форум - https://webinfo.guru –Там я всегда на связи
fillonon
На сайте с 24.12.2009
Offline
140
#9
elem и element это разные переменные же
Сайт знакомств - который скоро переплюнет Мамбу ( https://naytiparu.ru/ ), лучший массажер простаты ( https://happymans-xxl.ru/prostata-massager.html ) , Если нужно SEO продвижение ( https://seouspeh.ru/ )
S3
На сайте с 29.03.2012
Online
322
#10
Dram #:
timo-71 спасибо! Теперь понятно, не думал сто селениум ксс учитывает

селениум работает с результирующей html-страницей а не с кодом. Что браузер выдал - там и ходит, естествено, если элемент скрыт, то он его не найдет. На самом деле он не для парсинга а для тестирования был написан

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий