Я пытаюсь очистить веб-страницу с помощью селена в Python. Но я извлекаю пустой список из-за скрипта JS - PullRequest
0 голосов
/ 07 мая 2020
• 1000 *

Я пытаюсь автоматизировать систему для оповещения меня по электронной почте, если у меня есть какие-либо сообщения, на очень жесткой платформе. Единственный способ узнать, сколько там сообщений, - войти в систему, поэтому я использую селен. Я могу получить доступ к платформе. Но я застрял, пытаясь просто захватить простой текст, говорящий, есть ли у меня сообщения или нет.

текст и проверка для захвата

Я пробовал: find_element_by_id, by_xpath, by_name, by_tag, by_text, by_partial_text, et c. Действия, выполняем et c. Иногда он не распознает элемент, а иногда только извлекает пустой список.

Я обнаружил в исходном коде макроса, что текст генерируется функцией сценария JS

Есть ли способ просто прочитать этот текст и t с экрана после того, как фраза будет сгенерирована скриптом, и сохранить ее в переменной?

Это фрагмент кода функции в исходном коде:

function setNumeroMensajes(numMensajes)
{
    numMensajes = parseInt(numMensajes);
    if(isNaN(numMensajes))return;
    var mensaje = "";
    switch(numMensajes)
    {
        case 0:
            mensaje = "No tiene mensajes pendientes de leer";
            break;
        case 1:
            mensaje = "Tiene 1 mensaje pendiente de leer";
            break;
        default:
            mensaje = "Tiene "+numMensajes+" mensajes pendientes de leer";
            break;
    }
    document.getElementById("numeroMensajes").innerHTML = mensaje;

это то, что я пытаюсь, с разными попытками найти элементы

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

PATH = "*********/Selenium/chromedriver"
driver = webdriver.Chrome(PATH) 
driver.get("https://************/***********/identificacion.jsp")

usuario = driver.find_element_by_name("usuario")
usuario.send_keys("xxxxxx")
driver.implicitly_wait(3)

clave = driver.find_element_by_name("clave")
clave.send_keys("*******")
driver.implicitly_wait(3)

entrar = driver.find_element_by_name("entrar")
entrar.send_keys(Keys.RETURN)

driver.implicitly_wait(5)

actions = ActionChains(driver)
seguimiento = driver.find_element_by_xpath(
    '/html[1]/body[1]/table[1]/tbody[1]/tr[2]/td[1]/table[1]/tbody[1]/tr[2]/td[1]/table[1]/tbody[1]/tr[2]/td[2]/form[1]/table[1]/tbody[1]/tr[1]/td[5]/a[1]/img[1]')
actions.click(seguimiento)
actions.perform()
driver.implicitly_wait(5)


mis_mensajes = driver.find_elements_by_xpath(
    '/html[1]/body[1]/table[1]/tbody[1]/tr[1]/td[2]/table[1]/tbody[1]/tr[1]/td[4]/table[1]/tbody[1]/tr[3]')
actions.click(mis_mensajes)
actions.perform()
driver.implicitly_wait(5)

print(mis_mensajes)
for mensaje in mis_mensajes:
    print(mensaje)
...