利用硒获取价值

时间:2018-07-19 14:01:07

标签: python selenium

这是我得到的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”

2 个答案:

答案 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