Невозможно проанализировать данные внутри тега h4: Python3 - PullRequest
0 голосов
/ 14 ноября 2018

У меня возникла проблема при анализе данных на вкладке «Литература» из третьей таблицы. Шаги, которые я предпринял, чтобы достичь стола:

  • Перейти на ibl.mdanderson.org/fasmic/#!

  • Введите и выберите AKT1 (3 мутации) (ПРИМЕЧАНИЕ: кнопка «GO» не работает, выберите опцию в раскрывающемся списке)

  • Нажмите зеленую кнопку с текстом «MS», появится новая таблица.

  • В этой новой таблице будет вкладка под названием литература, мне нужен текст литературы и PMID.

Я попробовал следующий код, но он дает пустой список:

xyz= driver.find_element_by_xpath("//*[contains(text(),'Literature')]").click()
    for elements in driver.find_elements_by_xpath('//div[@class="tab-pane ng-scope active"]'):

        soup = BeautifulSoup(driver.page_source, 'lxml')
        table = soup.find('div', attrs={'id': "literature_div"})
        table_body = table.find('h4')
        rows = table.find_all('h4')
        for row in rows:
             cols = row.find_all('h4')
             # cols = [ele.text.strip() for ele in cols]
             litrature.append([ele for ele in cols if ele])  # Get rid of empty value
             print("Data from COLUMN 1:")
             print(litrature)

Как мне решить эту проблему?

UPDATE Когда я пытаюсь нажать кнопку «Далее» под таблицей «литература», я получаю следующую ошибку: «Сообщение: ссылка на элемент устарела; либо элемент больше не присоединен к DOM, либо не находится в контексте текущего фрейма, либо документ обновлен» Ниже приведена строка, которую я добавил для нажатия кнопки «СЛЕДУЮЩАЯ»: driver.find_element_by_xpath('//a[@ng-click="selectPage(page + 1, $event)"]').click()

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

нужно подождать 3 раза

from selenium import webdriver

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.get('https://ibl.mdanderson.org/fasmic/#!/')

WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH , '//input')))
input = driver.find_element_by_xpath("//input")
input.send_keys("AKT1\n")

button = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CLASS_NAME , 'btn-tab-avail')))
button.click()
driver.find_element_by_xpath("//*[contains(text(),'Literature')]").click()

WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#literature_div h4')))
rows = driver.find_elements_by_css_selector("#literature_div h4")

litrature = []

for item in rows:
    item = item.text
    litrature.append(item)
    print("Data from COLUMN 1:")
    print item
0 голосов
/ 14 ноября 2018

Как это?Кто-то с большим знанием ожидания Python может улучшить мои очереди ожидания.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC

url = "https://ibl.mdanderson.org/fasmic/#!/"
d = webdriver.Chrome()
wait = WebDriverWait(d, 10)
d.get(url)
d.find_element_by_css_selector('[type=text]').send_keys('AKT1 (3 mutations)')
d.find_element_by_css_selector("input[type='text']").send_keys(Keys.RETURN)
btn = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".btn.btn-default.btn-tab-avail")))
btn.click()
d.find_element_by_css_selector("[heading=Literature]").click()

ele = wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#literature_div [ng-repeat]"), "PMID"))
eles = d.find_elements_by_css_selector("#literature_div [ng-repeat]")

for item in eles:
    print(item.text,"\n")

d.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...