我正在尝试访问网络自动化项目的附件链接。问题是当我通过Chrome加载网页并检查元素时,我可以看到HTML代码(div和表),但是当我使用view source选项时,我看到的只是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>
我想在&#34; LINK GOES HERE&#34;
中提取链接页面来源没有div ID =&#34;部分附件&#34;或div内的任何其他元素。 (我搜索了相应的ID,类名等,没有成功)
我尝试了什么:
我尝试从浏览器中搜索页面源,但没有结果。
我的selenium代码尝试使用XPath搜索这些元素 不返回找到的元素。
XPath表达式:
driver.get_element_by_xpath("//td[@class = 'attachmentTitle']/a/@href")
我已经尝试让我的脚本进入睡眠状态,以防页面没有完全加载,没有效果。
有没有办法通过硒获取这些链接?任何帮助将受到高度赞赏。
编辑: 通过稍微修改URL以加载类似但是具有我可以切换到的iFrame标记然后使用相同Xpath查找元素并获取链接的页面来解决该问题。
此页面是在从其他页面进行一些重定向后加载的。 URL的轻微字符串修改(在Python中使用replace)解决了这个问题。感谢所有试图提供帮助的人。
答案 0 :(得分:0)
通过 -
获取元素ele = driver.get_element_by_xpath("//td[@class = 'attachmentTitle']/a")
然后使用 -
检索元素属性 ele.get_attribute('href')
答案 1 :(得分:0)
看起来你可能混在一起的东西很少:
当您在浏览器中查看页面源时,您将显示从服务器发送的html。这个html可以包含动态创建元素的JavaScript,但是在html中你只能看到创建它们的JavaScript代码。
在检查元素时看到的DOM是页面的当前结构。最初它与html几乎相同,但可能包括在从服务器加载页面后使用JavaScript动态创建或更改的元素。这也是Selenium与之互动的内容。
(不确定是否提到它,但为了完整起见)driver.page_source返回一个表示该DOM(当前状态)的字符串,但是作为有效的html格式。
html页面可以包含使用iframe标记的嵌套页面。每个(父或嵌套)页面都有自己的html源代码和自己的DOM。在Selenium中,您必须使用driver.switch_to方法在它们之间显式切换。请注意,在浏览器的开发工具(即inspect元素)中,所有页面的DOM显示为一个。