питон селен не может найти дочерний элемент - PullRequest
0 голосов
/ 22 июня 2019

Я пишу программу для перебора элементов на веб-странице. Я запускаю браузер так:

self.browser = webdriver.Chrome(executable_path="C:/Users/me/chromedriver.exe")
self.browser.get("https://www.google.com/maps/place/Foster+Street+Coffee/@36.0016436,-78.9018397,19z/data=!4m7!3m6!1s0x89ace473f05b7d39:0x42c63a92682d9ec3!8m2!3d36.0016427!4d-78.9012927!9m1!1b1")  

открывается сайт, в котором я могу найти элемент, который мне интересен:

reviews = self.browser.find_elements_by_class_name("section-review-line")  

теперь у меня есть список элементов для имени класса "section-review-line", который, кажется, заполняется правильно. Я хотел бы перебрать этот список элементов и выбрать подэлементы с набором логики. Чтобы получить подэлементы, которые, как я знаю, существуют как имя класса «section-review-review-content», я пробую это:

for review in reviews:
    content = review.find_element_by_class_name("section-review-review-content")  

Это ошибка с:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".section-review-review-content"}

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Хорошо, вот вся информация о товарах, которая вам нужна для каждого обзора.

reviews = driver.find_elements_by_class_name("section-review-content")
for review in reviews:
    reviewer = review.find_element_by_class_name("section-review-title").text
    numOfReviews = review.find_element_by_xpath(".//div[@class='section-review-subtitle']//span[contains(.,'reviews')]").text.strip().replace('.','')
    numberOfStarts = review.find_element_by_class_name("section-review-stars").get_attribute('aria-label').strip()
    publishDate = review.find_element_by_class_name("section-review-publish-date").text
    content = review.find_element_by_class_name("section-review-review-content").text
0 голосов
/ 22 июня 2019

а, разобрался, используя странную страницу с пустым элементом вверху, вызывая ошибку. Подавляющее большинство элементов не сталкивалось с этой проблемой. Использование метода try catch решило ее так:

    reviews = self.browser.find_elements_by_class_name("section-review-line")
    for review in reviews:
        try:
            content = review.find_element_by_class_name("section-review-review-content")
            rtext = content.find_element_by_class_name("section-review-text").text
        except:
            continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...