处理隐藏的元素

时间:2015-07-02 08:07:14

标签: javascript python html css web-scraping

我正在尝试抓一个网站,问题是,我无法与网站上的隐藏元素进行交互。代码如下:

点击

之前
li class="header-nav__item login header-item-is-hidden" data-toggle="dropdown" style="display:list-item"

<a class="header-nav__link" href="#login-panel" aria-controls="login-panel" aria-expanded="true" aria-haspopup="true"></a>

<script src="../../../Scripts/Login/Login.js" type="text/javascript"></script>
<script src="../../../Scripts/Login/2FALogin.js" type="text/javascript"></script>
<script src="../../../Scripts/common/error-handing.js" type="text/javascript"></script>
<div id="Login_pnlDownTime"></div>
<script type="text/javascript"></script>
li

点击

li class="header-nav__item jp-login header-item-is-hidden is-active" data-toggle="dropdown" style="display:list-item"

<a class="header-nav__link" href="#login-panel" aria-controls="login-panel" aria-expanded="true" aria-haspopup="true"></a>

<script src="../../../Scripts/Login/Login.js" type="text/javascript"></script>
<script src="../../../Scripts/Login/2FALogin.js" type="text/javascript"></script>
<script src="../../../Scripts/common/error-handing.js" type="text/javascript"></script>
<div id="Login_pnlDownTime"></div>
<script type="text/javascript"></script>

li

我的源代码

driver = webdriver.Firefox()
driver.get("http://www.website.com/Home.aspx")
print driver.page_source
ele = driver.find_element_by_xpath("//ul[@class = 'header-nav']/li[3]") 
#this is deon because the list element here is the third element in the list
ele.click()

此处单击元素时,下拉列表不可见。此外,ele.click()正在模拟悬停在元素上的行为,而不是单击元素。

点击下拉列表的元素的源代码

div id="Login_pnlDownTime" /div
div id="login-panel" class="js-header-panel header-nav__dropdown right" aria-hidden="true" /div
::before
a class="privilege-promo form-section" href="/EN/enrol-now.aspx">/a
div class="privilege-form form-section"
fieldset class="frm frm--vertical"
input id="Login_hddnInvalidEmail" type="hidden" value="Invalid Email Id" name="ctl00$Login$hddnInvalidEmail"> /input
input id="Login_hddnInvalidNumber" type="hidden" value="Invalid Number" name="ctl00$Login$hddnInvalidNumber"> /input
input id="Login_hddnInvalidMobileNumber" type="hidden" value="Invalid Mobile Number" name="ctl00$Login$hddnInvalidMobileNumber"> /input
input id="Login_hddnFlashMessageDelay" type="hidden" value="10000" name="ctl00$Login$hddnFlashMessageDelay"> /input
button id="Login_btnSubmitLogin" class="btn btn-primary align-right" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBac…n$btnSubmitLogin", "", true, "LoginPage", "", false, false))" value="Continue" name="ctl00$Login$btnSubmitLogin" type="submit"> /button

如何点击元素?

1 个答案:

答案 0 :(得分:0)

有一个元素不是(变得)可见(css: display:none ),另一个元素是从DOM ex中删除的。 Javascript的 removeChild() 方法。

  • 在第一种情况下,虽然隐藏了它仍然在DOM中,所以Selenium webdriver应该能够通过 id 或其他属性找到它。
  • 在第二种情况下,你做得不多(它不在DOM中)。

点击html之前/之后 它不清楚元素/它在哪里发生了什么。您是否会使用开发人员工具实时检查并在您的问题中发布截图/ html?

更新

我发现只有class='header-nav' header-nav__dropdown的{​​{1}}不是header-nav的元素。你应该知道它! 如果您想要以header-nav开头的课程找到,请使用starts-with()函数。

其次,根据你的xpath,元素是div,而不是ul。因此,无法找到并点击div id="login-panel" class="js-header-panel header-nav__dropdown right" aria-hidden="true" /div

您可以使用ulli s,class =&#39; header-nav&#39;将您真正的HTML粘贴到您的问题中吗?等?

  

我无法与之互动,因为它说该元素不可见

在我看来,你还没有掌握浏览器中的web开发工具。你必须能够在开发中看到所有不可见的元素。工具检查员。请参阅thisthis帖子,了解我的工作方式。