这是我得到的html代码:
<div id="bandeau">
<div>
<table border="0" align="left">
<tbody><tr>
<td align="left" colspan="2"><b>Désignation : </b>TAIE OREILLER VOLANT L63X63 IV</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Fournisseur : </b>0000036594 - AS'HABI</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Réf. fournisseur : </b>taie 63V ivoire</td>
</tr>
<tr>
<td align="left"><b>PCB : </b>20</td>
<td align="left"><b>SPCB : </b>5</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Type : </b>11 - PRODUIT SUIVI GD</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Univers : </b>010 - LINGE DE MAISON</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Famille : </b>010 - LINGE DE LIT</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Sous-famille : </b>025 - TAIE OREILLER/TAIE TRAVERSIN</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Segment : </b>005 - OREILLER</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Rayon : </b>LINGE DE LIT</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Module : </b>VIP LINGE DE LIT</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Volume PCB : </b>0,014720</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Packaging : </b>Carte interne/insert card</td>
</tr>
<tr>
<td align="left" colspan="2"><b>Sensibilité : </b>Autre</td>
</tr>
</tbody></table>
</div>
</div>
我想获取PCB(20)和Volume PCB(0,014720)的假定值
我如何在Python上使用Selenium做到这一点,我尝试了很多方法,但是我从未遇到过这种情况。
有什么主意吗?我会感激的
谢谢
这是我最后尝试的代码
table_id = driver.find_elements_by_id('bandeau')
rows = table_id.find_elements_by_tag("tr") # get all of the rows in the table
for row in rows:
col = row.find_elements(By.TAG_NAME, "td")[1]
print(col.text)
我这样做是为了获取表“ bandeau”中的元素并获取列表中的每一行,然后进行排序并获得我想要的
我收到此错误
AttributeError:“列表”对象没有属性“ find_elements_by_tag”
答案 0 :(得分:0)
这应该为您工作。使用contains
并在元素中查找特定的文本应该可以过滤所需的元素。
table_id.find_elements_by_xpath('//td[contains(text(), "PCB ")'].text
答案 1 :(得分:0)
您将看到以下HTML:<td align="left"><b>PCB : </b>20</td>
,20是一个文本节点。您可以通过Javascript执行程序进行检索。
代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome(executable_path = r'C:/Users/Downloads/chromedriver_win32/chromedriver.exe')
driver.maximize_window()
wait = WebDriverWait(driver,40)
driver.get("C:\\Users\\Desktop\\Python+Selenium\\SO.html")
PCB = driver.find_element_by_xpath("//b[starts-with(., 'PCB')]")
text_node_pcb = driver.execute_script("return arguments[0].nextSibling.textContent;", PCB)
print('this is pcb text ' +text_node_pcb)
volume_pcb = driver.find_element_by_xpath("//b[starts-with(., 'Volume PCB : ')]")
text_node_volume_pcb = driver.execute_script("return arguments[0].nextSibling.textContent;", volume_pcb)
print('this is volume pcb text ' +text_node_volume_pcb)
#Now we willl iterate through the list and fetch all the texts.
table = driver.find_elements_by_tag_name('b')
for i in range(len(table)):
text_node = driver.execute_script("return arguments[0].nextSibling.textContent;", table[i])
print(text_node)
控制台输出:
this is pcb text 20
this is volume pcb text 0,014720
TAIE OREILLER VOLANT L63X63 IV
0000036594 - AS'HABI
taie 63V ivoire
20
5
11 - PRODUIT SUIVI GD
010 - LINGE DE MAISON
010 - LINGE DE LIT
025 - TAIE OREILLER/TAIE TRAVERSIN
005 - OREILLER
LINGE DE LIT
VIP LINGE DE LIT
0,014720
Carte interne/insert card
Autre
希望这会有所帮助。
更新:
如果您要查找具有特定标题的文本,则可以使用以下内容:
all_content_from_table = driver.find_elements_by_css_selector('div#bandeau table td')
for content in all_content_from_table:
print(content.text)
在这种情况下,控制台输出将类似于:
Désignation : TAIE OREILLER VOLANT L63X63 IV
Fournisseur : 0000036594 - AS'HABI
Réf. fournisseur : taie 63V ivoire
PCB : 20
SPCB : 5
Type : 11 - PRODUIT SUIVI GD
Univers : 010 - LINGE DE MAISON
Famille : 010 - LINGE DE LIT
Sous-famille : 025 - TAIE OREILLER/TAIE TRAVERSIN
Segment : 005 - OREILLER
Rayon : LINGE DE LIT
Module : VIP LINGE DE LIT
Volume PCB : 0,014720
Packaging : Carte interne/insert card
Sensibilité : Autre