我尝试使用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没有打印所有年份(2001年到2018年),而是打印18个空字符串实例。我完全被难住了。任何帮助都将不胜感激。你知道吗
不要使用
Select
,只需找到xpath并获得所有选项标记,如下面所示,经过测试即可工作。你知道吗(//*[@id="selTeamSeason"])
指向团队选项卡的季节下拉列表,页面当时只有一个匹配的节点,因此它适合您。你知道吗//div[@id='stats-player-stats']//select[@id='selTeamSeason']
定位器,在“团队”选项卡中尝试季节下拉列表的//div[@id='stats-team-stats']//select[@id='selTeamSeason']
希望这对你有用
在您的第一次尝试中,以下
Locator Strategy
对默认的TEAMS
选项卡起作用:因为根据
Locator Strategy
的第一个匹配是Dropdown
本身,这在处理PLAYERS
选项卡时不是这样的。在PLAYERS
选项卡上列出Seasons
Dropdown
中可用的所有选项,您可以使用以下代码块:相关问题 更多 >
编程相关推荐