Почему я не могу найти html элемент с Python и селеном? - PullRequest
0 голосов
/ 25 марта 2020

У меня странная проблема с Python и селеном. Я получаю доступ к URL https://www.biggerpockets.com/users/JarridJ1. Когда вы нажимаете больше, это показывает дальнейшее содержание. Я могу понять, что это веб-сайт, основанный на React. Когда я просматриваю его в браузере и делаю Просмотр источника , я вижу необходимые вещи в элементе реакции <div data-react-class="Profile/Header/Header" data-react-props="{&quot. Я пытался автоматизировать Firefox с помощью Selenium, но я даже не смог с этим справиться. Проверьте скриншот:

enter image description here Ниже приведен код, который я пробовал:

from time import sleep

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


def parse(u):
    print('Processing... {}'.format(u))
    driver.get(u)
    sleep(2)
    html = driver.page_source
    driver.save_screenshot('bp.png')
    print(html)


if __name__ == '__main__':
    options = Options()
    options.add_argument("--headless")  # Runs Chrome in headless mode.
    options.add_argument('--no-sandbox')  # Bypass OS security model
    options.add_argument('--disable-gpu')  # applicable to windows os only
    options.add_argument('start-maximized')  #
    options.add_argument('disable-infobars')
    options.add_argument("--disable-extensions")
    driver = webdriver.Firefox()
    parse('https://www.biggerpockets.com/users/JarridJ1')

1 Ответ

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

Это сложно, но я нашел способ добраться до выделенного элемента. Все еще не уверен, почему driver.page_source не возвращает то, что вы ищете.

def parse(u):
    print('Processing... {}'.format(u))
    driver.get(u)
    sleep(2)
    get_everything = driver.find_elements_by_xpath("//*")
    for element in get_everything:
        print(element .get_attribute('innerHTML'))

    #html = driver.page_source
    #driver.save_screenshot('bp.png')
    #print(html)

Ниже приведен мой автономный пример:

from selenium import webdriver
import time


driver = webdriver.Chrome("C:\Path\To\chromedriver.exe")
driver.get("https://www.biggerpockets.com/users/JarridJ1")
time.sleep(5)
a = driver.find_element_by_xpath("//div[@data-react-class='Profile/Header/Header']")
b = a.get_attribute("data-react-props")
print(b)
c = driver.find_elements_by_xpath("//*")
for i in c:
    print(i.get_attribute('innerHTML'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...