我可以登录并访问我的帐户页面,以下是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<"...
并且有几个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我使用的是的FireFox版本。
当我运行这段代码时,account_history和expression xpath似乎工作得很好(它们打印为"none“,所以我认为它们工作正常),但在product_link上收到”product_block is not a legal expression“错误。
我有两个问题:
1:为什么"//TR/td/A@HREF“xpath不起作用?它应该使用product_block --它(应该)只使用TR段,所以它应该从TR开始,然后查找具有HREF...correct的第一个td?
我尝试使用HTML中使用的完全相同的大小写,但我认为这无关紧要...
2:我需要使用什么编码来查看元素的内容(HTML/文本)?
我需要能够这样做,以获得我需要的URL,以便下一个页面调用。
我也希望看到正确的超文本标记语言正在被读取,here...that应该是调试的正常部分。
元素数据是如何存储的?它是在可以使用Python读取的数组或表中吗?它必须在某个地方可用,才能在测试中使用-不是吗?
我为我的困惑道歉,但我在网上看到了很多关于这方面的信息,但其中大部分要么什么都不做,要么会导致错误。
available...and似乎没有任何“标准”的编码规则,所以我在这里有点绝望……
到目前为止,我真的很喜欢我在Selenium中看到的东西,但我需要克服它,才能使它工作!
编辑!
好的,在得到一些睡眠后,第一个答案提供了线索- find_elements_by_xpath创建了一个list...so,我用它来查找所有的xpath(“//acontain(@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太简单了,我被它绊倒了都看不见...
谢谢!
发布于 2012-01-24 23:23:01
1:为什么"//TR/td/A@HREF“xpath不起作用?它应该使用product_block --它(应该)只使用TR段,所以它应该从TR开始,然后查找具有HREF...correct的第一个td?
WebDriver只返回元素,而不返回所述元素的属性,因此:
"//TR/td/A" 有效,但是
"//TR/td/A@HREF"或
"//TR/td/A@ANYTHING"不会。
HTML2:我需要使用什么编码来查看元素的内容(
/文本)?
要检索内部文本:
string innerValue = element.Text;要检索innerhtml:
处理html。
要检索属性,请执行以下操作:
string hrefValue = element.GetAttribute("href");(C#,希望你能把它翻译成Python)
发布于 2012-01-24 14:15:56
除了browser.find_element_by_xpath之外,还有其他方法可以访问元素。
您可以通过例如id或class进行访问
browser.find_element_by_id
browser.find_element_by_link_text
browser.find_element
browser.find_element_by_class_name
browser.find_element_by_css_selector
browser.find_element_by_name
browser.find_element_by_partial_link_text
browser.find_element_by_xpath
browser.find_element_by_tag_name以上每个函数都有一个类似的函数,它返回一个列表(只需用elements替换element即可
注意:我将顶部的两行分开,因为我认为它们可能会对您有所帮助。
https://stackoverflow.com/questions/8982612
复制相似问题