我正在尝试抓取一个页面,如果数据存在,该页面具有以下“表视图”元素:
<div class="floatRight">
<a id="MainContent_TabContainerUsageAndCost_TabPanelGasUsage_GasUsageView_UCGasUsage_lnkTableView2" title="Table View" href="javascript:__doPostBack('ctl00$ctl00$MainContent$TabContainerUsageAndCost$TabPanelGasUsage$GasUsageView$UCGasUsage$lnkTableView2','')" 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”,因此即使页面没有“表视图”链接/元素,也会调用“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。请指教。
答案 0 :(得分:1)
在Se-RC中,您的脚本可以向元素发送单击事件,即使它们对用户不可见 - 它们只需要在DOM中。在Se-WebDriver中,元素也必须对用户可见。如果没有看到他正在抓取的页面的完整HTML,就无法进一步诊断。