Python Selenium视图页面源显示JavaScript,但检查元素显示HTML元素

时间:2018-04-02 09:16:33

标签: javascript jquery selenium-webdriver

我正在尝试访问网络自动化项目的附件链接。问题是当我通过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&amp;Template=atturl&amp;TableId=1003&amp;RecordId=6931123&amp;TableId2=19&amp;Id2=7705574&amp;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)解决了这个问题。感谢所有试图提供帮助的人。

2 个答案:

答案 0 :(得分:0)

通过 -

获取元素
ele = driver.get_element_by_xpath("//td[@class = 'attachmentTitle']/a")

然后使用 -

检索元素属性
 ele.get_attribute('href')

答案 1 :(得分:0)

看起来你可能混在一起的东西很少:

  1. 当您在浏览器中查看页面源时,您将显示从服务器发送的html。这个html可以包含动态创建元素的JavaScript,但是在html中你只能看到创建它们的JavaScript代码。

  2. 在检查元素时看到的DOM是页面的当前结构。最初它与html几乎相同,但可能包括在从服务器加载页面后使用JavaScript动态创建或更改的元素。这也是Selenium与之互动的内容。

  3. (不确定是否提到它,但为了完整起见)driver.page_source返回一个表示该DOM(当前状态)的字符串,但是作为有效的html格式。

  4. html页面可以包含使用iframe标记的嵌套页面。每个(父或嵌套)页面都有自己的html源代码和自己的DOM。在Selenium中,您必须使用driver.switch_to方法在它们之间显式切换。请注意,在浏览器的开发工具(即inspect元素)中,所有页面的DOM显示为一个。