2016-11-23 3 views
0

Я пытаюсь использовать Selenium в сочетании с BeautifulSoup. Чтобы быть более конкретным, я пытаюсь щелкнуть ссылку NCAA Division I из выпадающего меню here (изначально он говорит Top 25).Selenium Python не может найти_element_by_link_text

HTML-тег для ссылки выглядит следующим образом:

<li><a href="#" data-type="conference" data-week="null-null-null" data-group="50">NCAA Division I</a></li> 

Для меня, кажется, прямо вперед: driver.find_element_by_link_text('NCAA Division I').click()

Является ли это потому, что href="#" или, может быть, потому что <a> тег вложен в <li> теге ?

Вот что происходит:

(Pdb) driver.find_element_by_link_text('NCAA Division I').click() 
*** NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"NCAA Division I"} 
    (Session info: chrome=54.0.2840.100) 
    (Driver info: chromedriver=2.25.426924 (649f9b868f6783ec9de71c123212b908bf3b232e),platform=Linux 4.4.0-45-generic x86_64) 

Полный код:

import numpy as np 
import requests 
from bs4 import BeautifulSoup 
import re 
import datetime 
import os 
from selenium import webdriver 

scores_link = "http://www.espn.com/mens-college-basketball/scoreboard/_/date/20161122" 
r = requests.get(scores_link) 

driver = webdriver.Chrome() 
driver.get(scores_link) 
driver.find_element_by_link_text('NCAA Division I').click() 
soup = BeautifulSoup(driver.page_source) 

ответ

0

Поскольку "NCAA Division I" будет только после того, как наведению мыши, так что мы должны использовать ActionChains из селена (http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains)

попробуйте этот код, он будет работать:

from selenium import webdriver 
from selenium.webdriver.common.action_chains import ActionChains 

driver = webdriver.Chrome() 
driver.maximize_window() 
driver.get('http://www.espn.com/mens-college-basketball/scoreboard/_/date/20161122') 

el2=driver.find_element_by_xpath("//header[@class='automated-header']//button[.='Top 25']") 
action = ActionChains(driver) 
action.move_to_element(el2).click().perform() 

driver.find_element_by_link_text('NCAA Division I').click() 
Смежные вопросы