【发布时间】:2018-04-03 12:06:24
【问题描述】:
我正在尝试访问 Web 自动化项目的附件链接。问题是,当我通过 Chrome 加载网页并检查元素时,我可以看到 HTML 代码(div 和表格),但是当我使用查看源选项时,我看到的只是 JavaScript 函数。
现在,当我尝试通过 selenium(可以访问源代码,JavaScript 代码)访问元素时,我在那里找不到任何元素。我无法明确找到 iFrame 的提及,但我认为包含此信息的 iFrame 正在由 JavaScript 代码加载。有没有办法访问底层 HTML 以查找元素并访问链接?
注意:当我尝试查看作为 JavaScript 函数集合的页面源代码时,没有指向框架的链接,可以通过该链接获取所需的 HTML。
对于上下文:
inspect 元素看起来像:
<div id="SectionAttachments">
<table summary="" border="0" cellspacing="5" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><img class="attachmentsIcon" src="images/modern_graphite/attachment_url.png" alt="Linked Resource" title="Linked Resource"></td>
<td class="attachmentTitle">
<a href="LINK GOES HERE" class="nounderline" title="" target="_blank">Customer View</a>
</td>
<td>by</td>
<td class="attachmentAuthor contact_popover" ivalue="99832"></td>
<td class="attachmentDate"><span class="dateSpacer">-</span>10/25/2016 04:21:13 AM</td>
<td width="16">
<a href="javascript:onAttEdit('IssuePage&Template=atturl&TableId=1003&RecordId=6931123&TableId2=19&Id2=7705574&ProjectId=4581')" class="nounderline" title=""><img align="middle" src="images/modern_graphite/edit.gif" alt="Edit this Attachment" title="Edit this Attachment" border="0"></a>
</td>
<td width="16">
<script type="text/javascript">
if(this.eMail)
{
document.write( "<a href=javascript:eMail('85',99832,document.forms[0].F99832,7705574) style={13}><img src='images/modern_graphite/email.gif' border='0' align='top' alt='Send E-mail' title='Send E-mail'></a>");
}
else if(parent&&parent.eMail)
{
document.write( "<a href=javascript:parent.eMail('85',99832,document.forms[0].F99832,7705574) style={13}><img src='images/modern_graphite/email.gif' border='0' valign='bottom' alt='Send E-mail' title='Send E-mail'></a>");
}
</script><a href="javascript:eMail('85',99832,document.forms[0].F99832,7705574)" style="{13}"><img src="images/modern_graphite/email.gif" border="0" align="top" alt="Send E-mail" title="Send E-mail"></a>
</td>
</tr>
</tbody>
</table>
</div>
我想提取“LINK GOES HERE”处的链接
页面源没有 ID = "section attachments" 的 div 或 div 内的任何其他元素。 (我用相应的ID,类名等搜索,没有成功)
我尝试过的:
我尝试从浏览器搜索页面源,没有结果。
-
我的 selenium 代码尝试使用 XPath 搜索这些元素,它 返回未找到元素。
XPath 表达式:
driver.get_element_by_xpath("//td[@class = 'attachmentTitle']/a/@href") 我已尝试让我的脚本休眠以防页面未完全加载,但没有效果。
有没有办法通过 selenium 获取这些链接?任何帮助将不胜感激。
编辑: 通过稍微修改 URL 以加载一个呈现类似但具有 iFrame 标签的页面,我可以切换到然后使用相同的 Xpath 查找元素并获取链接,从而解决了该问题。
在从另一个页面重定向几次后加载此页面。对 URL 进行轻微的字符串修改(在 Python 中使用替换)解决了这个问题。感谢所有试图提供帮助的人。
【问题讨论】:
-
遍历 DOM 并找到
<iframe>标签并在尝试定位元素之前切换到它。 -
inspect 元素中有 iFrame 标签,但页面源中没有。这就是问题所在。所以 Selenium 找不到 iFrame。
-
使用与 iframe 标签相关的 HTML 更新问题,包括元素节点,以防元素在
<iframe>标签内。 -
您采取了哪些步骤来获取页面源?
-
Selenium 不查看视图源...它查看浏览器中呈现的 HTML。这相当于在 Chrome 中使用检查工具。以此为基础定位您的定位器,在 IFRAME 中添加一个开关,并确保添加一个等待。
标签: javascript jquery selenium-webdriver