我正在尝试抓取一个网站,并且有一个元素,如果您将鼠标移到它上面,它会在气泡中显示一些信息。我正在使用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。当您将鼠标移到箭头和数字上时,会出现一个包含某些内容的矩形。这就是我想要的。
答案 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属性,它将对其进行检测。