如何在Python中使用Selenium找到onmouseover元素?

时间:2015-04-19 00:32:45

标签: javascript python selenium

我正在尝试抓取一个网站,并且有一个元素,如果您将鼠标移到它上面,它会在气泡中显示一些信息。我正在使用Selenium来抓取页面,但我不知道如何找到特定的元素。

查看页面的来源,我得到了这个:

<td class="right odds up"><div onmouseout="delayHideTip()" onmouseover="page.hist(this,'P-0.00-0-0','1sj0oxv464x0x3pm6i',14,event,0,1)">

提供一些细节,以下是我要抓的页面:match page。当您将鼠标移到箭头和数字上时,会出现一个包含某些内容的矩形。这就是我想要的。

6 个答案:

答案 0 :(得分:7)

我会按照以下步骤解决给定的问题:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.get("Your URL HERE")

找到你想要悬停的元素

data = driver.find_element_by_xpath('//*[@id="odds-data-table"]/div[1]/table/tbody/tr[2]/td[4]')

之后将鼠标悬停在元素

hov = ActionChains(driver).move_to_element(data)
hov.perform()

并获取数据

data_in_the_bubble = driver.find_element_by_xpath("//*[@id='tooltiptext']")
hover_data = data_in_the_bubble.get_attribute("innerHTML")

答案 1 :(得分:0)

您可以在Selenium代码中使用Javascript。请在此处查看答案以获取示例:Running javascript in Selenium using Python

然后,使用Javascript,您可以触发onMouseOver事件,如此主题所示:How to trigger mouseover function on an element when not really mouseovered

触发后,您将能够找到新显示的HTML内容并获取其文本。

答案 2 :(得分:0)

您可以使用xpath:

driver.find_elements(By.XPATH, '//*[@onmouseover]')

它将搜索所有已定义onmouseover属性的元素。

  

Waring,如果javascript使用addEventListener

添加属性,它将无效

希望有所帮助。

答案 3 :(得分:0)

你有一点误导性的问题。事实上,当你执行mouseover()动作时,你会错过被数据填充的元素。

在页面底部,您可以找到以下代码:

<div id="tooltipdiv">
  <span class="help">
    <span class="help-box3 y-h wider">
      <span class="wrap-help">
        <span class="spc" id="tooltiptext">
           ... onmouseover() text goes here..
        </span>
      </span>
    </span>
   </span>
 </div>

首先,进行悬停操作,#tooltiptext元素在之后被填充。这是一个简单的定位器,你可以使用:

tooltiptext = findElement(By.xpath("//*[@id='tooltiptext']");

答案 4 :(得分:0)

BeautifulSoup可以做到这一点!拿HTML并将其转储成汤......

from bs4 import BeautifulSoup
import requests

r = requests.get("http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onmouseover")
theHtml = r.content
theSoup = BeautifulSoup(theHtml)

for event_tag in theSoup.findAll(onmouseover=True):
    print event_tag['onmouseover']

打印以下内容:'bigImg(this)'

答案 5 :(得分:0)

我认为这个问题是针对特定的网站oddsportal.com。 如果有人想获得初始赔率(当您将鼠标放在任何庄家赔率上都会显示出来),则可以使用以下方法:

[X:Y]

此代码遍历所有庄家赔率,获取所有列值。如果其div中有任何列值onmouseover属性,它将对其进行检测。