我是 python selenium 環境中的新蜜蜂。我正在嘗試從此處輸入鏈接描述獲取 SQL 版本表
from selenium.webdriver.common.by import By
from selenium import webdriver
# define the website to scrape and path where the chromediver is located
website = "https://www.sqlserverversions.com"
driver = webdriver.Chrome(executable_path='/Users//Downloads/chromedriver/chromedriver.exe')
# define 'driver' variable
# open Google Chrome with chromedriver
driver.get(website)
matches = driver.find_elements(By.TAG_NAME, 'tr')
for match in matches:
b=match.find_elements(By.XPATH,"./td[1]")
print(b.text)
它說 AttributeError: 'list' object has no attribute 'text'。我是否選擇了寫入語法和正確的引數來獲取資料?
下面是我試圖獲取資料的表格。 在此處輸入影像描述
以下是我試圖放入代碼的引數。
在此處輸入影像描述
請告知在代碼中需要修改什么以獲得表格格式的資料。
謝謝,阿倫
uj5u.com熱心網友回復:
b.text在獲得 的結果后,您呼叫的代碼的一部分將find_elements回傳一個串列。您只能呼叫b.text單個 WebElement(而不是它們的串列)。這是更新的代碼:
from selenium.webdriver.common.by import By
from selenium import webdriver
website = "https://www.sqlserverversions.com"
driver = webdriver.Chrome(executable_path='/Users//Downloads/chromedriver/chromedriver.exe')
driver.get(website)
matches = driver.find_elements("css selector", "tr")
for match in matches[1:]:
items = match.find_elements("css selector", "td")
for item in items:
print(item.text)
這將列印出很多行,除非您限制回圈。
uj5u.com熱心網友回復:
如果您只需要來自第一個表的資料:
from selenium.webdriver.common.by import By
from selenium import webdriver
website = "https://www.sqlserverversions.com"
driver = webdriver.Chrome(executable_path='/Users//Downloads/chromedriver/chromedriver.exe')
driver.get(website)
show_service_pack_versions = True
xpath_first_table_sql_rows = "(//table[@class='tbl'])[1]//tr/td/a[starts-with(text(),'SQL Server')]//ancestor::tr"
matches = driver.find_elements(By.XPATH, xpath_first_table_sql_rows)
for match in matches:
sql_server_a_element = match.find_element(By.XPATH, "./td/a[2]")
print(sql_server_a_element.text)
sql_server_rtm_version_a_element = match.find_element(By.XPATH, ".//td[@class='rtm']")
print('RTMs:')
print(sql_server_rtm_version_a_element.text)
if(show_service_pack_versions):
print('SPs:')
sql_server_sp_version_td_elements = match.find_elements(By.XPATH, ".//td[@class='sp']")
for td in sql_server_sp_version_td_elements:
print('---')
print(td.text)
print('----------------------------------')
如果您設定show_service_pack_versions = False,則將跳過有關服務包的資訊
uj5u.com熱心網友回復:
如果您只需要文本,則在瀏覽器端執行此操作會更簡單:
data = driver.execute_script("""
return [...document.querySelectorAll('tr')].map(tr => [...tr.querySelectorAll('td')].map(td => td.innerText))
""")
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496219.html
下一篇:讓所有湯高于某個div
