Python selenium iselementpresent 给出 "wrong"答案

标签 python selenium

我正在尝试抓取一个页面,如果数据存在,该页面具有以下“ TableView ”元素:

<div class="floatRight">
   <a id="MainContent_TabContainerUsageAndCost_TabPanelGasUsage_GasUsageView_UCGasUsage_lnkTableView2" title="Table View" href="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$TabContainerUsageAndCost$TabPanelGasUsage$GasUsageView$UCGasUsage$lnkTableView2&#39;,&#39;&#39;)" style="color:NoColor;">Table View</a>

</div>

否则,页面会出现以下错误消息。

<div class="error display">
                <span id="MainContent_TabContainerUsageAndCost_TabPanelElectricityUsage_ElectricityUsageView_UCElectricityUsage_lblMesg" style="font-weight:bold;">The account selected has no usage and costs data currently to be displayed.</span>

</div>

在 Selenium 中,我试图在开始抓取数据之前检查上述两个条件。我尝试了以下方法:

if self.selenium.is_element_present('link=Table view'):
   self.selenium.click('link=Table view')
else:
   return []  # data not found

但是,“if”语句始终返回“true”,因此即使页面没有“表格 View ”链接/元素,也会调用“click”。

然后,我重写了代码来检查错误消息,如下所示:

if self.selenium.is_element_present('MainContent_TabContainerUsageAndCost_TabPanelElectricityUsage_ElectricityUsageView_UCElectricityUsage_lblMesg'):
    return []  # data not found
else:
    self.selenium.click('link=Table view')

现在,“if”语句总是返回 false,因此“click”在不应该调用的时候被调用了!

显然,我没有正确使用 is_element_present 。请指教。

最佳答案

在 Se-RC 中,您的脚本可以将单击事件发送到元素,即使它们对用户不可见 - 它们只需要位于 DOM 中即可。在 Se-WebDriver 中,元素还必须对用户可见。如果没有看到您正在抓取的页面的完整 HTML,就不可能进一步诊断。

关于Python selenium iselementpresent 给出 "wrong"答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777574/

相关文章:

python - Pytest 结果 JUnit 风格的 xml 文件测试用例计数

python - 这里使用持久性 ID 解决的 pickling 问题是什么?

python - 当所有类名称相似时,如何在selenium python中提取数据?

java - 了解 Fluent Selenium 等等

node.js - 如何使用 Selenium 和 NodeJS 在 Chrome 上模仿 URL 输入和 ENTER 点击

python - 失败的 ndb 事务尝试不回滚所有更改?

python - 如何在Python中访问列表列表?

Python脚本,让它更短

java - 从 <li> 中选择下拉值

windows - Protractor/ Selenium "could not find chromedriver at"(在 Windows 上)