Python Selenium 访问内部元素
Python Selenium access inner elements
为了好玩,我尝试提取本 NFL 赛季第 1 天的预定比赛。
截至目前,我在 Python
中有此代码
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
browser = webdriver.Chrome(ChromeDriverManager().install())
from selenium.webdriver.chrome.options import Options
opts = Options()
opts.headless=True
#browser = driver(options=opts)
print("Start")
website = "https://www.nfl.com/schedules/2020/REG1"
browser.get(website)
gamedays = WebDriverWait(browser, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "nfl-o-matchup-group")))
print ("There are: ", len(gamedays))
这会打印出“There are: 3”,这是正确的,因为有三个部分具有 class。
我怎样才能更深入地研究每个部分?
比如有比赛日期的元素,当然还有主队和客队的元素。
我试过了
for j in range(0,len(gamedays)):
game_on = gamedays[j].find_elements_by_class_name('d3-o-section-title')
print(game_on)
打印
[<selenium.webdriver.remote.webelement.WebElement (session="d8807c1ca013d7a2d58bd7377b42ca1a", element="034de32d-bf64-4544-94aa-d97ed6640367")>]
这没有帮助。
那么,我怎样才能获得这些信息?
感谢任何帮助。
解决方案
遍历 game_on
中返回的对象并打印它们的 innerHtml
print(game_on.get_attribute("innerHTML"))
或
for element in game_on:
print(element.get_attribute("outerHTML"))
你快到了。使用代码行:
print(game_on)
您正在打印元素,您需要打印 textContent。
解决方案
打印 textContent 例如9 月 11 日,星期五,等等您可以使用以下任一方式 :
使用 xpath 和 get_attribute()
:
browser.get(website)
print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(browser, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "nfl-o-matchup-group")))])
使用 xpath 和 text 属性:
browser.get(website)
print([my_elem.text for my_elem in WebDriverWait(browser, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "nfl-o-matchup-group")))])
You can find a relevant discussion in
结尾
Link 到有用的文档:
get_attribute()
方法Gets the given attribute or property of the element.
text
属性returnsThe text of the element.
- Difference between text and innerHTML using Selenium
为了好玩,我尝试提取本 NFL 赛季第 1 天的预定比赛。 截至目前,我在 Python
中有此代码from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
browser = webdriver.Chrome(ChromeDriverManager().install())
from selenium.webdriver.chrome.options import Options
opts = Options()
opts.headless=True
#browser = driver(options=opts)
print("Start")
website = "https://www.nfl.com/schedules/2020/REG1"
browser.get(website)
gamedays = WebDriverWait(browser, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "nfl-o-matchup-group")))
print ("There are: ", len(gamedays))
这会打印出“There are: 3”,这是正确的,因为有三个部分具有 class。 我怎样才能更深入地研究每个部分? 比如有比赛日期的元素,当然还有主队和客队的元素。
我试过了
for j in range(0,len(gamedays)):
game_on = gamedays[j].find_elements_by_class_name('d3-o-section-title')
print(game_on)
打印
[<selenium.webdriver.remote.webelement.WebElement (session="d8807c1ca013d7a2d58bd7377b42ca1a", element="034de32d-bf64-4544-94aa-d97ed6640367")>]
这没有帮助。
那么,我怎样才能获得这些信息?
感谢任何帮助。
解决方案
遍历 game_on
中返回的对象并打印它们的 innerHtml
print(game_on.get_attribute("innerHTML"))
或
for element in game_on:
print(element.get_attribute("outerHTML"))
你快到了。使用代码行:
print(game_on)
您正在打印元素,您需要打印 textContent。
解决方案
打印 textContent 例如9 月 11 日,星期五,等等您可以使用以下任一方式
使用 xpath 和
get_attribute()
:browser.get(website) print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(browser, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "nfl-o-matchup-group")))])
使用 xpath 和 text 属性:
browser.get(website) print([my_elem.text for my_elem in WebDriverWait(browser, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "nfl-o-matchup-group")))])
You can find a relevant discussion in
结尾
Link 到有用的文档:
get_attribute()
方法Gets the given attribute or property of the element.
text
属性returnsThe text of the element.
- Difference between text and innerHTML using Selenium