【发布时间】:2012-01-25 05:03:41
【问题描述】:
我可以登录并访问我的帐户页面,这里是 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>
请注意,我真正需要的唯一项目是第一个带有“order=7886745'>7886745
还有几个我需要阅读的 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 版本的 webdriver。
当我运行它时,account_history 和 product_block xpath 似乎工作正常(它们打印为“none”,所以我认为它们工作),但我在 product_link 上收到“expession 不是合法表达式”错误。
我有两个问题:
1:为什么“//TR/td/A@HREF”xpath 不起作用?它应该使用 product_block - 它(应该)只是 TR 段,所以它应该以 TR 开头,然后查找具有 HREF 的第一个 td ...正确吗?
我尝试使用 HTML 中使用的确切大小写,但我认为这无关紧要...
2:我需要使用什么编码来查看元素的内容(HTML/文本)?
我需要能够执行此操作以获取下一页调用所需的 URL。
我还想确定这里正在读取正确的 HTML...这应该是调试的正常部分,恕我直言。
元素数据如何存储?它是否在我可以使用 Python 读取的数组或表中?它必须在某个地方可用,才能在测试中发挥作用——不是吗?
我很抱歉让我如此困惑,但我在网上看到了很多关于此的信息,但其中大部分要么没有任何作用,要么会导致错误。
似乎没有任何“标准”编码规则可用......所以我在这里有点绝望......
到目前为止,我真的很喜欢我在 Selenium 中看到的东西,但我需要克服它才能完成这项工作!
已编辑!
好的,睡了一会儿后,第一个答案提供了线索 - find_elements_by_xpath 创建了一个列表...所以我用它来查找所有 xpath("//a[contains(@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
如此简单,以至于绊倒我都看不到它......
谢谢!
【问题讨论】: