首页 > 解决方案 > 如何使用 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

标签: pythonselenium

解决方案


从第 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

推荐阅读