#python #selenium #selenium-webdriver
#python #селен #selenium-webdriver
Вопрос:
У меня есть веб-страница с таблицей со многими строками. Пользователь даст мне число (15308), которое можно найти в верхней строке с первым <td>
тегом, и это единственная информация, которая у меня будет. Я хочу иметь возможность использовать это число для поиска данных между <th></th>
тегом (более конкретно 0), но только для строки таблицы. Например, я прикрепил две строки таблицы, и мне нужны <th>
данные с номером 15308, но не <th>
данные из строки таблицы, в первой из которых стоит номер 15309 <td>
. Приветствуется любая помощь!
Желаемый результат: 0
<tr>
<td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR 2019amp;amp;SLN=15308">15308</a></td>
<td nowrap="">INFO 101 </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER"> 0</th><td align="CENTER"> 229</td>
<td></td>
</tr>
<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR 2019amp;amp;SLN=15309">15309</a></td>
<td nowrap="">INFO 101 </td>
<td>AA</td>
<td align="CENTER">LB</td>
<td>SOCIAL NETWORKING </td>
<td align="CENTER"> 25</td>
<td align="CENTER"> 25</td>
<td align="CENTER"> 26</td>
<th align="CENTER" style=""> 2</th><td align="CENTER"> 21</td>
<td></td>
</tr>
Комментарии:
1. @Fareed : Какое значение вы хотите получить и какой xpath вы пробовали?
2. @DirtyBit Я пытаюсь получить значение 0, найденное в <th> </th>
3. @FareedMabrouk посмотрите, поможет ли ответ, опубликованный ниже?
4. @FareedMabrouk Каким должен быть результат вашего последнего отредактированного вопроса?
5. @DirtyBit Я должен получать только 0
Ответ №1:
Используйте следующий код :
userValue='15308'
all_td_th_of_row = driver.find_elements_by_xpath("//td[normalize-space()='" userValue "']//following-sibling::td|th")
i = 0
while i<len(all_td_th_of_row) :
print(all_td_th_of_row[i].text)
i=i 1
Комментарии:
1. На странице есть несколько <th> </th>, как я могу выбрать тот, который содержится в <tr> </tr>, который также содержит число 15308?
2. @FareedMabrouk : что такое 15308?
3. @FareedMabrouk : 15308 это то значение, которое вы хотите получить? можете ли вы дать мне точный html или ссылку на вашу страницу
4. Как я могу дать вам точный html? Если я дам вам ссылку, это не сработает, поскольку для этого требуется логин @PritamMaske
5. Я думаю, что теперь моя проблема более ясна, я отредактировал вопрос
Ответ №2:
То, что я всегда находил прекрасным, используя beauitfulsoup
:
Использование xpath="1"
в качестве атрибута:
line = '''<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR 2019amp;amp;SLN=15308" style="">15308</a></td>
<td nowrap="">INFO 101 </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER" style="" xpath="1"> 0</th><td align="CENTER"> 229</td>
<td></td>
</tr>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(line, 'html.parser')
xpathTh = soup.find('th', attrs={'xpath': '1'})
print(xpathTh.text.strip())
ВЫВОД:
0
Редактировать:
Чтобы получить все значения из атрибута:
line = '''<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR 2019amp;amp;SLN=15308" style="">15308</a></td>
<td nowrap="">INFO 101 </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER" style="" xpath="1"> 0</th><td align="CENTER"> 229</td>
<th align="CENTER" style="" xpath="1"> 1</th><td align="CENTER"> 229</td>
<th align="CENTER" style="" xpath="1"> 2</th><td align="CENTER"> 229</td>
<td></td>
</tr>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(line, 'html.parser')
xpathTh = soup.find_all('th', attrs={'xpath': '1'})
for elem in xpathTh:
print(elem.text.strip())
ВЫВОД:
0
1
2
ПРАВКА 2:
Учитывая, что вам нужно только xpath value
если anchor tag
внутри td
(inside tr
) имеет значение 15308
:
line = '''<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR 2019amp;amp;SLN=15308" style="">15308</a></td>
<td nowrap="">INFO 101 </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER" style="" xpath="1"> 0</th><td align="CENTER"> 229</td>
<td></td>
</tr>
<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR 2019amp;amp;SLN=2222" style="">22222</a></td>
<td nowrap="">INFO 101 </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER" style="" xpath="1"> 1</th><td align="CENTER"> 229</td>
<td></td>
</tr>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(line, 'html.parser')
trElems = soup.find_all('tr')
toFind = '15308'
for tr in trElems:
val = tr.select('td a')[0].text
if toFind == val:
xpathTh = tr.find_all('th', attrs={'xpath': '1'})
for elem in xpathTh:
print(elem.text.strip())
ВЫВОД:
0
ПРАВКА 3:
Продолжение комментариев:
line = '''<tr>
<td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR 2019amp;amp;SLN=15308">15308</a></td>
<td nowrap="">INFO 101 </td>
<td>A </td>
<td align="CENTER">LC</td>
<td>SOCIAL NETWORKING </td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 150</td>
<td align="CENTER"> 250</td>
<th align="CENTER"> 0</th><td align="CENTER"> 229</td>
<td></td>
</tr>
<tr><td><a href="http://sdb.admin.uw.edu/timeschd/UWNetID/sln.asp?QTRYR=SPR 2019amp;amp;SLN=15309">15309</a></td>
<td nowrap="">INFO 101 </td>
<td>AA</td>
<td align="CENTER">LB</td>
<td>SOCIAL NETWORKING </td>
<td align="CENTER"> 25</td>
<td align="CENTER"> 25</td>
<td align="CENTER"> 26</td>
<th align="CENTER" style=""> 2</th><td align="CENTER"> 21</td>
<td></td>
</tr>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(line, 'html.parser')
trElems = soup.find_all('tr')
toFind = '15308'
for tr in trElems:
val = tr.select('td a')[0].text
if toFind == val:
xpathTh = tr.find_all('td')[7]
print("For the value: {}, The result is {}".format(toFind, xpathTh.find_next('th').text.strip()))
ВЫВОД:
For the value: 15308, The result is 0
Комментарии:
1. Я полагаю, что это сработало бы для таблицы с одной строкой, но страница представляет собой большую таблицу со многими строками, я нахожу номер 15308 через «find_element_by_link_text», но это все, что я могу сделать, мне было интересно, может быть, есть способ переместить определенное количество элементов, используя цикл for?
2. Извините, но я не думаю, что я четко объясняю свою проблему, я отредактирую свой пост, чтобы попытаться придать ему больше ясности
3. Я думаю, что я прояснил свою проблему в новом отредактированном вопросе, я пытаюсь получить только <th> данные из одной строки таблицы. Спасибо, что остаетесь со мной!