Nano Hash - криптовалюты, майнинг, программирование

Как получить текст в веб-таблице td с помощью Selinium Python

Я пытаюсь извлечь текст из веб-таблицы td, но не смог найти элемент; у таблицы нет класса или идентификатора, поэтому я безуспешно пытался использовать xpath.

Любая помощь приветствуется.

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.ncbi.nlm.nih.gov/tools/primer-blast/primertool.cgi?ctg_time=1585700551&job_key=9P4rCho2F54woA2lAMUpl3reOKVXzSO4Vg&CheckStatus=Check")

pair_1 = driver.find_element(By.XPATH("html/body/div[@id ='wrap']/div[@id='content-wrap']/div[@id='content']/div[contains(@class, ' ')]/div[contains(@class, ' ')]/div[contains(@class, 'ui-helper-resert')]/div[@id ='alignInfo']/div[@id ='alignments']/table/tbody/tr[2]/td[1]"))

print(pair_1.text)

#OR

pair_1.get_attribute("innerHTML")

print(pair_1)

Вернуть следующую ошибку

TypeError: 'str' object is not callable

Более простой xpath

pair_1 = driver.find_element_by_xpath("//table/tbody/tr[2]/td[1]")
print(pair_1.text)

Возвращает это

Looking for [chromedriver 80.0.3987.06 mac6] driver in cache 
File found in cache by path [/Users/usr/.wdm/drivers/chromedriver/80.0.3987.06/mac6/chromedriver]

веб-сайт и html введите здесь описание изображения введите здесь описание изображения

Спасибо заранее, я новичок в Selenium.


  • попробуйте использовать get_attribute (innerHTML) 01.04.2020
  • Отличная идея, но, к сожалению, pair_1.get_attribute("innerHTML") я до сих пор не могу понять, TypeError: 'str' object is not callable почему? 01.04.2020
  • Где именно вы получаете эту ошибку? По вызову get_attribute() или по вызову print()? Если второе, убедитесь, что вы не назвали одну из своих переменных print, тем самым удалив встроенную функцию. 01.04.2020

Ответы:


1

Попробуйте следующее

import time

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.ncbi.nlm.nih.gov/tools/primer-blast/primertool.cgi?ctg_time=1585700551&job_key=9P4rCho2F54woA2lAMUpl3reOKVXzSO4Vg&CheckStatus=Check")
time.sleep(2)

pair_1 = driver.find_element_by_css_selector(
    "#alignments > div:nth-child(1) > table > tbody > tr:nth-child(2) > td:nth-child(2)"
).get_attribute("innerHTML")


print(pair_1)

для Windows, Chrome версии 80


выделите текст > щелкните правой кнопкой мыши > проверьте > щелкните правой кнопкой мыши > проверьте > щелкните правой кнопкой мыши <td> селектор копирования

введите здесь описание изображения


введите здесь описание изображения

01.04.2020
  • Это превосходно, большое спасибо! Мне также нужно найти обратный праймер в следующем <tr>, а также как Tm, так и длину продукта. Не могли бы вы вкратце объяснить, как вам удалось найти элемент, или предоставить какую-нибудь документацию, пожалуйста? Еще раз спасибо @0m3r 01.04.2020
  • Еще раз спасибо за разработку @ 0m3r !! Это сработало отлично. 01.04.2020

  • 2

    Попробуйте следующий код:

    driver.get('https://www.ncbi.nlm.nih.gov/tools/primer-blast/primertool.cgi?ctg_time=1585700551&job_key=9P4rCho2F54woA2lAMUpl3reOKVXzSO4Vg&CheckStatus=Check')
    
    str1 = "Primer pair 1";
    str2 = "Forward primer";
    el = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h2[text()='" +str1 +"']//following-sibling::table//th[text()='" +str2+"']//following-sibling::td[1]")))
    print(el.text)
    

    Вы можете изменить строковое значение.

    И эта ошибка TypeError: 'str' object is not callable появляется, потому что вы ошиблись в этой строке:

    pair_1 = driver.find_element(By.XPATH("the value"))
    

    Должно:

    pair_1 = driver.find_element(By.XPATH, "the value")
    
    01.04.2020
  • Большое спасибо за разъяснение, мне было интересно, почему я получаю эту ошибку. 01.04.2020

  • 3

    Чтобы получить значение 'Прямой праймер', 'Обратный праймер' и 'Длина продукта' из Primer pair 1 Induce WebDriverWait() и visibility_of_element_located() и после XPath.

    1. Создайте список элементов, а затем выполните итерацию.

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    product_list=['Forward primer','Reverse primer','Product length']
    driver=webdriver.Chrome()
    driver.get("https://www.ncbi.nlm.nih.gov/tools/primer-blast/primertool.cgi?ctg_time=1585700551&job_key=9P4rCho2F54woA2lAMUpl3reOKVXzSO4Vg&CheckStatus=Check")
    for item in product_list:
        print(WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//h2[text()='Primer pair 1']/following::table[1]//th[text()='{}']/following-sibling::td[1]".format(item)))).text)
    

    Вывод:

    GAGGGCATACCCCTCGTAGA
    CTGCCGTTTTCCGTAGGACT
    506
    

    Чтобы получить данные от всех пар Primer, попробуйте это.

    1. Создайте список праймеров, а затем выполните итерацию.

    2. Создайте список элементов, а затем выполните итерацию.

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    driver=webdriver.Chrome()
    driver.get("https://www.ncbi.nlm.nih.gov/tools/primer-blast/primertool.cgi?ctg_time=1585700551&job_key=9P4rCho2F54woA2lAMUpl3reOKVXzSO4Vg&CheckStatus=Check")
    
    list_primerpairs=['Primer pair 1','Primer pair 2','Primer pair 3','Primer pair 4','Primer pair 5']
    product_list=['Forward primer','Reverse primer','Product length']
    for primer in list_primerpairs:
        print(primer)
        print("===========================================")
        for item in product_list:
    
            print(WebDriverWait(driver,15).until(EC.visibility_of_element_located((By.XPATH,"//h2[text()='{}']/following::table[1]//th[text()='{}']/following-sibling::td[1]".format(primer,item)))).text)
        print("==========================================")
    

    Вывод:

    Primer pair 1
    ===========================================
    GAGGGCATACCCCTCGTAGA
    CTGCCGTTTTCCGTAGGACT
    506
    ==========================================
    Primer pair 2
    ===========================================
    AGTCCTACGGAAAACGGCAG
    GCTATTCTCGCAGCTCACCA
    621
    ==========================================
    Primer pair 3
    ===========================================
    AGGTAGTCAGTCAGGTCCCG
    TGCCGTTTTCCGTAGGACTC
    558
    ==========================================
    Primer pair 4
    ===========================================
    AGGGCATACCCCTCGTAGAT
    TCTGCCGTTTTCCGTAGGAC
    506
    ==========================================
    Primer pair 5
    ===========================================
    GGGCATACCCCTCGTAGATG
    GCCGTTTTCCGTAGGACTCT
    502
    ==========================================
    

    Надеюсь это поможет.

    01.04.2020
  • Это здорово @KunduK. Прямо сейчас я просто работаю над тем, чтобы получить лучший результат, но это будет очень полезно, если мы решим получить более одной пары праймеров. Что касается аргумента wait, мой полный код начинается с ввода параметров на предыдущей странице и позволяет инструменту найти пары. Я пробовал время ожидания 30-120, но все равно получаю TimeoutException 01.04.2020
  • Пока WebDriverWait не работает, а time.sleep() работает. 01.04.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..