2017-02-24 85 views
0
<div id="tabs" class="clearfix"> 
    <ul id="remove"> 
     <li class="btn_arrow_tab left inactive"> 
      <a href="#" class="doubleText">Pay Monthly <small>View standard rates and Bolt Ons</small> 
      </a> 
     </li> 
     <li class="btn_arrow_tab right inactive"> 
      <a href="#" class="doubleText">Pay &amp; Go<small>View standard rates and Bolt Ons</small> 
      </a> 
     </li> 
    </ul> 
</div> 

我没有webscraping的经验,并试图按照示例和文档单击带有文本“付费每月”的按钮。此按钮然后动态显示一些我需要复制的文本。我如何着手点击这个初学者,然后阅读显示的文本。我正在尝试使用硒,会不会更好?我一直在尝试这一行代码,但它没有做任何事情:从字典列表中返回值列表,其中键等于某个值

driver.find_element_by_xpath("//a[text()[contains(.,'Pay Monthly')]]").click() 
+0

Beautifulsoup绝对不适合这种类型的任务。它只解析html,可以用来从中提取信息,但它与真正的网页实际交互很少。 –

+0

你的意思是“做任何事情”?你会得到一个异常,或者只是没有点击按钮?文本应该出现在同一个按钮中,而不是“每月付费”? – Andersson

回答

0

使用绝对和相对xpath的混合来定位一个元素总是一个好习惯。

你应该首先找到一个具有唯一标识符的父代。你提到的元素有两个父项与一个静态ID。一个是根div,另一个是ul

现在,我们可以按照您的路径使用文本查找元素。以下任何一项都有效。

driver.find_element_by_xpath("//div[@id='tabs']//a[text()[contains(.,'Pay Monthly')]]").click() 
driver.find_element_by_xpath("//ul[@id='remove']//a[text()[contains(.,'Pay Monthly')]]").click() 

但是,如果该项目是静态元素,并考虑到您的目标在这里,我会建议以下方法。当它返回多个元素时索引你的xpath。

myElement = driver.find_element_by_xpath("//div[@id='tabs']//a[@href='#'][1]") 
myElement.click() 

然后你可以捕捉文本。您可以放置​​一些wait以确保文本被更改。

myText = myElement.text 

让我知道这是行不通的。

相关问题