Я могу войти в систему и получить доступ к странице моей учетной записи, вот пример HTML (изменен для краткости и не должен превышать ограничение URL):
<div class='table m_t_4'>
<table class='data' border=0 width=100% cellpadding=0 cellspacing=0>
<tr class='title'>
<td align='center' width='15'><a></a></td>
<td align='center' width='60'></td>
</tr>
<TR bgcolor=>
<td valign='top' align='center'>1</TD>
<td valign='top' align='left'><img src='/images/sale_small.png' alt='bogo sale' />Garden Escape Planters</TD>
<td valign='top' align='right'>13225</TD>
<td valign='top' align='center'>2012-01-17 11:34:32</TD>
<td valign='top' align='center'>FILLED</TD>
<td valign='top' align='center'><A HREF='https://www.daz3d.com/i/account/orderdetail?order=7886745'>7886745</A></TD>
<td valign='top' align='center'><A HREF='https://www.daz3d.com/i/account/req_dlreset?oi=18087292'>Reset</A>
</TR>
Обратите внимание, что единственный элемент, который ядействительно нужен первый HREF с "order = 7886745 '> 7886745 <" ... </p>
И есть несколько блоков TR, которые мне нужно прочитать.
Я использую следующую кодировку xpath:
browser.get('https://www.daz3d.com/i/account/orderitem_hist?')
account_history = browser.find_element_by_xpath("//div[@class='table m_t_4']");
print account_history
product_block = account_history.find_element_by_xpath("//TR[contains(@bgcolor, '')]");
print product_block
product_link = product_block.find_element_by_xpath("//TR/td/A@HREF")
print product_link
Я использую версию веб-драйвера Python FireFox.
Когда я запускаю это, кажется, что xpath account_history и product_block выглядитработать нормально (они печатают как «none», поэтому я предполагаю, что они работали), но я получаю ошибку «expition is not Legal expression» на product_link.
У меня есть 2 вопроса:
1: Почему не работает xpath "// TR / td / A @ HREF"?Предполагается, что он использует product_block - который он (должен быть) просто сегмент TR, поэтому он должен начинаться с TR, а затем искать первый td, имеющий HREF ... правильно?
Iпопытался использовать точный регистр, используемый в HTML, но я думаю, что это не должно иметь значения ...
2: Какую кодировку мне нужно использовать, чтобы увидеть содержимое (HTML / текст) элементов?
Мне нужно сделать это, чтобы получить URL, который мне нужен для вызова следующей страницы.
Я также хотел бы убедиться, что здесь читается правильный HTML-код ... это должно быть обычной частью отладки, ИМХО.
Как хранятся данные элемента?Это в массиве или таблице, которые я могу читать, используя Python?Он должен быть доступен где-то, чтобы быть полезным для тестирования - не так ли?
Я прошу прощения за то, что так запутался, но я вижу много информации об этом в Интернете, и все жебольшая часть этого либо ничего не делает, либо вызывает ошибку.
Кажется, что нет никаких "стандартных" правил кодирования ... и поэтому я немного отчаялся здесь ...
Мне действительно нравится то, что я видел в Selenium вплоть доэтот момент, но мне нужно обойти его, чтобы заставить это работать!
Отредактировано!
ОК, после некоторого сна первый ответ дал подсказку - find_elements_by_xpath создает список ...so я использовал это, чтобы найти все элементы xpath ("// a [содержит (@href, 'https://www.daz3d.com/i/account/orderdetail?order=')]");) во всей истории, затем получил доступ к списку, который он создал ... и записать его в файл, чтобы быть увереннымиз того, что я видел.
Пересмотренный код:
links = open("listlinks.txt", "w")
browser.get('https://www.daz3d.com/i/account/orderitem_hist?')
account_history = browser.find_element_by_xpath("//div[@class='table m_t_4']");
print account_history.get_attribute("div")
product_links = []
product_links = account_history.find_elements_by_xpath("//a[contains(@href,'https://www.daz3d.com/i/account/orderdetail?order=')]");
print str(len(product_links)) + ' elements'
for index, item in enumerate(product_links):
link = item.get_attribute("href")
links.write(str(index) + '\t' + str(link) + '\n')
И это дает мне файл со ссылками, которые мне нужны ...
0 https://www.daz3d.com/i/account/orderdetail?order=7905687
1 https://www.daz3d.com/i/account/orderdetail?order=7886745
2 https://www.daz3d.com/i/account/orderdetail?order=7854456
3 https://www.daz3d.com/i/account/orderdetail?order=7812189
Так простоЯ не мог увидеть, что он споткнулся ...
Спасибо!