python - 如何使用 Selenium 和 Python 从表中捕获隐藏数据?
问题描述
我的问题如下:
脚本中指示的网页有一个按钮(“Ver todo 50”),用于显示表的其余记录。我用 Selenium 有效地单击了按钮,但我无法获得表的 50 条记录,而只能获得页面最初显示的前 15 条记录。
有没有人想收集完整的日志(50)?
脚本是:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
chrome_path= r'C:\Users\ddddddd\Desktop\ddddd\chromedriver.exe'
driver= webdriver.Chrome(chrome_path)
driver.get('https://getdaytrends.com/es/venezuela/')
new= WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="trends"]/div/a'))).click()
#to determine the max rows to iterate
rows= len(driver.find_elements_by_xpath('//*[@id="trends"]/table[1]/tbody/tr'))
trends= []
for n in range(1, rows+1):
dato= driver.find_element_by_xpath('//*[@id="trends"]/table[1]/tbody/tr['+str(n)+']/td[1]').text
trends.append(dato)
print(len(trends)) #I need 50 records
解决方案
从第 16 行开始,有一个新表,所以我们需要编写 xpath,并基于 if 和 else 子句,我们可以有这样的代码:
#to determine the max rows to iterate
rows = len(driver.find_elements_by_xpath('//*[@id="trends"]/table[1]/tbody/tr'))
new_rows = len(driver.find_elements(By.XPATH, "(//table[contains(@class, 'table-hover')])[2]/descendant::tr"))
counter = 1
trends = []
for n in range(1, rows + new_rows + 1):
if n <= 15:
dato = driver.find_element_by_xpath('//*[@id="trends"]/table[1]/tbody/tr[' + str(n) + ']/td[1]').text
trends.append(dato)
else:
dato = driver.find_element_by_xpath(f"((//table[contains(@class, 'table-hover')])[2]/descendant::tr/td[1])[{counter}]").text
trends.append(dato)
counter = counter + 1
print(len(trends)) #I need 50 records