Arhn - архитектура программирования

Как получить текст элемента, который постоянно меняется в python

Я просто пытаюсь автоматизировать веб-сайт, такой как Replika (чат-бот). В нем постоянно появляется новый чат, но с совершенно новым xpath и id. Мне становится сложно отслеживать недавний чат с селеном. Я попробовал перечисленные решения здесь и здесь, но они мне не подошли (или я что-то не так сделал). Я только начал использовать селен, поэтому многого о нем не знаю. Пожалуйста, помогите мне. Я использую питон 3.8.2.

Вот код:

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
from urllib.request import urlopen


browser = webdriver.Chrome("C:\Chromedriver\chromedriver.exe")

browser.get("https://my.replika.ai/")
time.sleep(3)

browser.find_element_by_xpath("""//* 
[@id="root"]/div/div[1]/main/a[2]""").click()

time.sleep(2)



### Login ###
browser.find_element_by_xpath("""//* 
[@id="emailOrPhone"]""").send_keys("gmail_id")
time.sleep(1)
browser.find_element_by_xpath("""//*[@id="loginForm"]/button""").click()
time.sleep(3)



### Password ###
browser.find_element_by_xpath("""//*[@id="login- 
password"]""").send_keys("gmail_password")
time.sleep(1)
browser.find_element_by_xpath("""//*[@id="loginForm"]/button""").click()
time.sleep(10)


### Accept the cookies ###
browser.find_element_by_xpath("""//* 
[@id="root"]/div/div[1]/div[1]/button""").click()
time.sleep(5)


### Getting the Latest text ###  Here is where it doesn't work
# This is a implementation that I tried and it didn't work
url = "https://my.replika.ai/"

# We use try-except in case the request was unsuccessful because of
# wrong URL
try:
    page = urlopen(url)

except Exception:
    print("Error opening the URL")

soup = BeautifulSoup(page, 'html.parser')

content = soup.find('div', {"id": "chat-messages"})

chat = ''
for i in content.findAll('span'):
    chat = chat + ' ' + i.text

print(chat)

Заранее спасибо.


  • so I don't know a lot of things about it. Так неужели никто не знает ваш код и какие у вас триалы. Пожалуйста, ознакомьтесь с tour и минимальным воспроизводимый пример и снова отредактируйте сообщение. 10.05.2021
  • Извините за ошибку, пост обновлен. 10.05.2021

Ответы:


1
browser = webdriver.Chrome()

browser.get("https://my.replika.ai/")
time.sleep(3)

browser.find_element_by_xpath("""//* 
[@id="root"]/div/div[1]/main/a[2]""").click()

time.sleep(2)


### Login ###
browser.find_element_by_xpath("""//* 
[@id="emailOrPhone"]""").send_keys("username")
time.sleep(1)
browser.find_element_by_xpath("""//*[@id="loginForm"]/button""").click()
time.sleep(5)


### Password ###
browser.find_element_by_xpath("""//*[@id="login-password"]""").send_keys("password")
time.sleep(1)
browser.find_element_by_xpath("""//*[@id="loginForm"]/button""").click()
time.sleep(3)


### Accept the cookies ###
browser.find_element_by_xpath("""//* 
[@id="root"]/div/div[1]/div[1]/button""").click()
time.sleep(5)


a = browser.find_elements(By.XPATH, "//*[@data-author]")

print([i.text for i in a])


print("last text : " + a[-1].text)

просто используйте локатор browser.find_elements(By.XPATH, //*[@data-author])

это находит все элементы с атрибутом @data-author (это свойство есть только у чата) и обращается к [-1], чтобы получить последний элемент. вызовите [-1].text, чтобы получить текст из него

10.05.2021
  • Ой ну спасибо ! это сработало! Я узнал о browser.find_element(s). Большое спасибо за внимание к моей проблеме. 11.05.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..