Python 单击菜单上的所有元素
我试图单击python.org导航菜单上的所有元素。我的代码运行时没有任何错误,但只单击了“community”元素。这是我的密码:Python 单击菜单上的所有元素,python,html,selenium,pycharm,Python,Html,Selenium,Pycharm,我试图单击python.org导航菜单上的所有元素。我的代码运行时没有任何错误,但只单击了“community”元素。这是我的密码: driver = webdriver.Chrome("/Users/drao/Documents/chromedriver") driver.get("http://www.python.org") driver.maximize_window() #finds all elements under mainnav (about, downloads, docu
driver = webdriver.Chrome("/Users/drao/Documents/chromedriver")
driver.get("http://www.python.org")
driver.maximize_window()
#finds all elements under mainnav (about, downloads, documentation...)
all_elems = driver.find_elements_by_id('mainnav')
for elem in all_elems:
if elem.is_displayed():
elem.click()
这是网页的html
<nav id="mainnav" class="python-navigation main-navigation do-not-print" role="navigation">
尝试使用以下选择器抓取所有元素:
all_elems = driver.find_elements_by_css_selector('nav.python-navigation ul.navigation li')
请记住,每次单击其中一个元素时,整个页面都会重新加载,您可能会遇到StaleElementExceptions尝试使用以下选择器获取所有元素:
all_elems = driver.find_elements_by_css_selector('nav.python-navigation ul.navigation li')
请记住,每次单击其中一个元素时,整个页面都会重新加载,您可能会遇到StaleElementExceptions,因为只有一个元素的ID为mainnav,因此您的代码在技术上工作正常。它抓取一个元素并单击它,然后退出。我猜点击会落在DOM中第一个可点击的元素上 要获得所有可单击的选项卡,您需要使用不同的方法。下面是一个使用CSS路径的路径(未经测试): 但是我认为^^^^实际上不起作用,因为
click()
会重新加载页面,所以您会发现的所有元素在第一次单击后都会过时
相反,您可以利用nth of type
技术仅在需要时获取每个元素,然后单击它(测试并工作):
只有一个元素的ID
mainnav
,因此您的代码在技术上工作正常。它抓取一个元素并单击它,然后退出。我猜点击会落在DOM中第一个可点击的元素上
要获得所有可单击的选项卡,您需要使用不同的方法。下面是一个使用CSS路径的路径(未经测试):
但是我认为^^^^实际上不起作用,因为click()
会重新加载页面,所以您会发现的所有元素在第一次单击后都会过时
相反,您可以利用nth of type
技术仅在需要时获取每个元素,然后单击它(测试并工作):
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.python.org")
driver.maximize_window()
try:
#finds all elements under mainnav (about, downloads, documentation...)
all_elems = driver.find_elements_by_css_selector('nav#mainnav > ul > li')
# all_elems is now only useful as a count of all the elems on the screen
for index, _ in enumerate(all_elems, 1):
css_path = "nav#mainnav > ul > li:nth-of-type({0})"
elem = driver.find_element_by_css_selector(css_path.format(index))
if elem.is_displayed():
elem.click()
finally:
driver.close()