我正在尝试使用Selenium来提取动态加载的内容。内容位于http://www.afl.com.au/stats
我正试图导航到“玩家”标签,然后获取所有可用季节的列表。当我从“团队”选项卡执行此操作时,以下代码可以正常工作:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome(executable_path=r'D:\ChromeDriver\chromedriver.exe')
driver.get('http://www.afl.com.au/stats')
dropdown_menu = Select(driver.find_element_by_xpath('//*[@id="selTeamSeason"]'))
for option in dropdown_menu.options:
print(option.text)
它为我提供了“季节”标签中所有可用选项的列表。
但是,当我首先点击“播放器”标签时,我无法使用几乎相同的代码获得相同的列表:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import time
driver = webdriver.Chrome(executable_path=r'D:\ChromeDriver\chromedriver.exe')
driver.get('http://www.afl.com.au/stats')
driver.find_element_by_xpath('//*[@id="stats_tab"]/ul/li[2]').click()
time.sleep(3)
dropdown_menu = Select(driver.find_element_by_xpath('//*[@id="selTeamSeason"]'))
for option in dropdown_menu.options:
print(option.text)
点击成功执行,我等待内容更新,但是Selenium打印了18个空字符串实例,而不是打印所有年份(2001年到2018年)。我彻底难倒了。任何帮助都将不胜感激。
答案 0 :(得分:1)
而不是使用Select
,只需找到xpath并获取所有选项标签,如下所示,经过测试和工作。
element = driver.find_element_by_xpath('//*[@id="selTeamSeason"]')
all_options = element.find_elements_by_tag_name("option")
for option in all_options:
print(option.text)
答案 1 :(得分:1)
(//*[@id="selTeamSeason"])
指向“团队”选项卡的季节下拉列表,页面当时只有一个匹配的节点,因此它适用于您。//div[@id='stats-player-stats']//select[@id='selTeamSeason']
定位器用于季节下拉菜单,在“小组”标签中尝试季节下拉列表//div[@id='stats-team-stats']//select[@id='selTeamSeason']
希望这对你有用
答案 2 :(得分:0)
在您第一次尝试时,以下Locator Strategy
使用了默认 TEAMS
TAB:
dropdown_menu = Select(driver.find_element_by_xpath('//*[@id="selTeamSeason"]'))
由于Locator Strategy
的第一场比赛是Dropdown
本身,而在处理 PLAYERS
TAB时并非如此。在 PLAYERS
TAB上列出 Seasons
Dropdown
中提供的所有选项,您可以使用以下代码块:
dropdown_menu = Select(driver.find_element_by_xpath("//div[@id='stats-player-stats']//select[@id='selTeamSeason']"))
for option in dropdown_menu.options:
print(option.text)