我一直试图抓住关注网站(http://epl.squawka.com/english-premier-league/21-05-2017/watford-vs-man-city/matches)。我想要做的是点击'shot'然后让javascript加载然后将鼠标悬停在每个'镜头元素'上并拉出出现的数据(时间和玩家信息)。
我的问题是,当我试图将鼠标悬停在“镜头元素”上时,我会继续收到“无法找到元素”错误。当我在我尝试这样做的时候打印page_source时,我可以清楚地看到元素ARE实际存在以及当我保存屏幕截图时可见。
我认为元素可能会以某种方式隐藏。我试过'切换'(也许是错误的)无济于事。
driver = webdriver.Firefox(executable_path='/usr/bin/geckodriver')
driver.get("http://epl.squawka.com/english-premier-league/21-05-2017/watford-vs-man-city/matches")
try:
element = WebDriverWait(driver, 1000).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='mc-content-wrap']/div[2]/div[1]")))
finally:
driver.find_element_by_xpath("//*[@id='mc-content-wrap']/div[2]/div[1]").click()
time.sleep(1)
driver.find_element_by_id("mc-stat-shot").click()
time.sleep(5)
shotsVar = -1
html = driver.page_source
bsObj = BeautifulSoup(html, "html.parser")
for circle in bsObj.find("svg",{'height':'224.6'}).findAll('circle'):
shotsVar += 1
if circle['r'] == '6.5':
shotsXpathCode = ("//*[@id='mc-pitch-view']/div[2]/div[1]/svg/g[%s]/circle" % shotsVar)
print(shotsXpathCode)
try:
element = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.XPATH,"%s" % shotsXpathCode)))
finally:
element_to_hover_over = driver.find_element_by_xpath("%s" % shotsXpathCode)
hover = ActionChains(driver).move_to_element(element_to_hover_over)
hover.perform()
答案 0 :(得分:0)
Xpath和SVG似乎不能很好地协同工作。
尝试以下XPath:
"//*[@id='mc-pitch-view']/div[2]/div[1]/*[name()='svg']/*[name()='g'][%s]/*[name()='circle']"