【问题标题】:How to get text in td web-table with Selinium Python如何使用 Selenium Python 在 td web-table 中获取文本
【发布时间】:2026-01-14 16:30:01
【问题描述】:

我正在尝试从 td webtable 中提取文本,但无法找到该元素;该表没有类或ID,所以我尝试了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")
  • 好主意,但遗憾的是pair_1.get_attribute("innerHTML") 仍然给我TypeError: 'str' object is not callable 任何想法为什么?
  • 您究竟在哪里收到此错误?在get_attribute() 电话或print() 电话上?如果是后者,请检查以确保您没有将其中一个变量命名为 print,从而删除内置函数。

标签: python html selenium selenium-webdriver html-table


【解决方案1】:

Primer pair 1得到'正向引物'、'反向引物'和'产品长度'的值诱导@ 987654322@ 和 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
==========================================

希望这会有所帮助。

【讨论】:

  • 这很棒@KunduK。现在我只是在努力获得热门,但如果我们选择获得一对以上的引物,这将非常有用。就wait 参数而言,我的完整代码从上一页输入参数到让工具找到对。我尝试了 30-120 的等待时间,但我仍然不断收到 TimeoutException
  • WebDriverWait 不起作用,而 time.sleep() 起作用。
【解决方案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")

【讨论】:

  • 非常感谢您的澄清,我想知道为什么会出现这个错误。
【解决方案3】:

试试下面的

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>复制选择器


【讨论】:

  • 这太好了,非常感谢!我还需要在下一个<tr> 以及“Tm's”和“Product Length”中找到“Reverse Primer”。您能否简要解释一下您是如何找到该元素的或提供一些文档的?再次感谢@0m3r
  • 再次感谢您详细说明@0m3r !这非常有效。