Как получить текст в тд-таблице с помощью Selinium Python - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь извлечь текст из веб-таблицы 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 enter image description here enter image description here

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

Ответы [ 3 ]

1 голос
/ 01 апреля 2020

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

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")
1 голос
/ 01 апреля 2020

Чтобы получить значение ' Прямой праймер ', ' Обратный праймер ' и ' Длина продукта ' из Primer pair 1 Индуцируйте 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

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

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
==========================================

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

1 голос
/ 01 апреля 2020

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

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> копировать селектор

enter image description here


enter image description here

...