Preetkaran Singh
Preetkaran Singh

Reputation: 512

Extracting link text from HTML Table in python selenium

I'm new to selenium. I wanted to extract the link text from the HTML table from the following HTML code of the website.

Code Snippet:

<div style="width:210px" id="calenderdiv">
    <table id="calender" align="center" bgcolor="#ABABAB" width="90%" cellspacing="1" cellpadding="0" border="0">
    <tbody>
        <tr height="25" bgcolor="#DDDDDD" style="font-family:arial ;font-size:12;font-weight:bold; color: #006699">
            <td align="center" width="14%">S</td>
            <td align="center" width="14%">M</td>
            <td align="center" width="14%">T</td>
            <td align="center" width="14%">W</td>
            <td align="center" width="14%">T</td>
            <td align="center" width="14%">F</td>
            <td align="center" width="14%">S</td>
        </tr>
        <tr height="25" bgcolor="#FFFFFF" style="font-family:arial ;font-size:12;font-weight:bold; color: #006699">
            <td bgcolor="#EFEFEF" align="center"><a href="/2010/1/1/archivelist/year-2010,month-1,starttime-40179.cms"></a>&nbsp; </td>
            <td align="center"><a href="/2010/1/1/archivelist/year-2010,month-1,starttime-40179.cms"></a>&nbsp; </td>
            <td align="center"><a href="/2010/1/1/archivelist/year-2010,month-1,starttime-40179.cms"></a>&nbsp; </td>
            <td align="center"><a href="/2010/1/1/archivelist/year-2010,month-1,starttime-40179.cms"></a>&nbsp; </td>
            <td align="center"><a href="/2010/1/1/archivelist/year-2010,month-1,starttime-40179.cms"></a>&nbsp; </td>
            <td align="center"><a href="/2010/1/1/archivelist/year-2010,month-1,starttime-40179.cms">1</a></td>
            <td align="center"><a href="/2010/1/2/archivelist/year-2010,month-1,starttime-40180.cms">2</a></td>
        </tr>
        <tr height="25" bgcolor="#FFFFFF" style="font-family:arial ;font-size:12;font-weight:bold; color: #006699">
            <td bgcolor="#EFEFEF" align="center"><a href="/2010/1/3/archivelist/year-2010,month-1,starttime-40181.cms">3</a></td>
            <td align="center"><a href="/2010/1/4/archivelist/year-2010,month-1,starttime-40182.cms">4</a></td>
            <td align="center"><a href="/2010/1/5/archivelist/year-2010,month-1,starttime-40183.cms">5</a></td>
            <td align="center"><a href="/2010/1/6/archivelist/year-2010,month-1,starttime-40184.cms">6</a></td>
            <td align="center"><a href="/2010/1/7/archivelist/year-2010,month-1,starttime-40185.cms">7</a></td>
            <td align="center"><a href="/2010/1/8/archivelist/year-2010,month-1,starttime-40186.cms">8</a></td>
            <td align="center"><a href="/2010/1/9/archivelist/year-2010,month-1,starttime-40187.cms">9</a></td>
        </tr>
        <tr height="25" bgcolor="#FFFFFF" style="font-family:arial ;font-size:12;font-weight:bold; color: #006699">
            <td bgcolor="#EFEFEF" align="center"><a href="/2010/1/10/archivelist/year-2010,month-1,starttime-40188.cms">10</a></td>
            <td align="center"><a href="/2010/1/11/archivelist/year-2010,month-1,starttime-40189.cms">11</a></td>
            <td align="center"><a href="/2010/1/12/archivelist/year-2010,month-1,starttime-40190.cms">12</a></td>
            <td align="center"><a href="/2010/1/13/archivelist/year-2010,month-1,starttime-40191.cms">13</a></td>
            <td align="center"><a href="/2010/1/14/archivelist/year-2010,month-1,starttime-40192.cms">14</a></td>
            <td align="center"><a href="/2010/1/15/archivelist/year-2010,month-1,starttime-40193.cms">15</a></td>
            <td align="center"><a href="/2010/1/16/archivelist/year-2010,month-1,starttime-40194.cms">16</a></td>
        </tr>
        <tr height="25" bgcolor="#FFFFFF" style="font-family:arial ;font-size:12;font-weight:bold; color: #006699">
            <td bgcolor="#EFEFEF" align="center"><a href="/2010/1/17/archivelist/year-2010,month-1,starttime-40195.cms">17</a></td>
            <td align="center"><a href="/2010/1/18/archivelist/year-2010,month-1,starttime-40196.cms">18</a></td>
            <td align="center"><a href="/2010/1/19/archivelist/year-2010,month-1,starttime-40197.cms">19</a></td>
            <td align="center"><a href="/2010/1/20/archivelist/year-2010,month-1,starttime-40198.cms">20</a></td>
            <td align="center"><a href="/2010/1/21/archivelist/year-2010,month-1,starttime-40199.cms">21</a></td>
            <td align="center"><a href="/2010/1/22/archivelist/year-2010,month-1,starttime-40200.cms">22</a></td>
            <td align="center"><a href="/2010/1/23/archivelist/year-2010,month-1,starttime-40201.cms">23</a></td>
        </tr>
        <tr height="25" bgcolor="#FFFFFF" style="font-family:arial ;font-size:12;font-weight:bold; color: #006699">
            <td bgcolor="#EFEFEF" align="center"><a href="/2010/1/24/archivelist/year-2010,month-1,starttime-40202.cms">24</a></td>
            <td align="center"><a href="/2010/1/25/archivelist/year-2010,month-1,starttime-40203.cms">25</a></td>
            <td align="center"><a href="/2010/1/26/archivelist/year-2010,month-1,starttime-40204.cms">26</a></td>
            <td align="center"><a href="/2010/1/27/archivelist/year-2010,month-1,starttime-40205.cms">27</a></td>
            <td align="center"><a href="/2010/1/28/archivelist/year-2010,month-1,starttime-40206.cms">28</a></td>
            <td align="center"><a href="/2010/1/29/archivelist/year-2010,month-1,starttime-40207.cms">29</a></td>
            <td align="center"><a href="/2010/1/30/archivelist/year-2010,month-1,starttime-40208.cms">30</a></td>
        </tr>
        <tr height="25" bgcolor="#FFFFFF" style="font-family:arial ;font-size:12;font-weight:bold; color: #006699">
            <td bgcolor="#EFEFEF" align="center"><a href="/2010/1/31/archivelist/year-2010,month-1,starttime-40209.cms">31</a></td>
            <td>&nbsp; </td>
            <td>&nbsp; </td>
            <td>&nbsp; </td>
            <td>&nbsp; </td>
            <td>&nbsp; </td>
            <td>&nbsp; </td>
        </tr>
    </tbody>
</table>

For the above snippet I wrote the following code in selenium:

from selenium import webdriver
from selenium.webdriver.common.by import By

option = webdriver.ChromeOptions()
option.add_argument("--incognito")
option.add_argument("--start-maximized")

chrome_path = r"C:\Users\singh\Downloads\chromedriver_win32\chromedriver.exe"
browser = webdriver.Chrome(chrome_path, options=option)
browser.get("https://timesofindia.indiatimes.com/archive/year-2010,month-1.cms")
browser.implicitly_wait(10)

num = []
numbers = browser.find_elements(By.XPATH, "//table[@class = 'calender']/tbody/tr/td/a[@href]")

for n in numbers:
    number = n.text
    num.append(number)

Expected Output:

num = ['S', 'M', 'T', 'W', 'T', 'F', 'S', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31']

The program is returning both num and numbers lists as empty lists.

I know something's not correct in the XPath entered in the code. But I'm not able to figure out what is the error.

OS: Windows 10 x64
Python IDE: Anaconda Spyder
Python Version: 3.6

Upvotes: 2

Views: 1526

Answers (1)

Guy
Guy

Reputation: 50864

There are two problems

1.calender is id, not class.

2.To get the href you need to use get_attribute, not text

numbers = browser.find_elements(By.XPATH, '//table[@id="calender"]//a')

for n in numbers:
    number = n.get_attribute('href')
    num.append(number)

Upvotes: 5

Related Questions