#python #html #selenium #web-scraping
Вопрос:
Я пытаюсь очистить этот сайт с помощью Селена. Мой код может загрузить нужную мне таблицу, но когда я пытаюсь извлечь данные, я не могу извлечь данные из скрытых строк, даже если данные видны в HTML.
Это краткое описание таблицы HTML:
<tbody>
<tr style="">
<td class="footable-first-column">
<span class="footable-toggle">
**column 1 data**
</span>
</td>
<td> **column 2 data**</td>
.
. More data
.
</tr>
.
. More Visible rowas
.
<tr style="display: none;">
.
. Same data structure
.
</tr>
</tbody>
Это код, который я использую, чтобы открыть таблицу и записать данные в csv-файл:
# Find search year button
searchYearButton = driver.find_element_by_id('searchYearButton')
# Click button
searchYearButton.click()
driver.implicitly_wait(3)
# Find Form
searchForm = driver.find_element_by_css_selector("form[id='searchVehicleForm']")
# Find search inventory button
searchInventoryButton = driver.find_element_by_css_selector("input[value='Search']")
# Click search inventory button
searchInventoryButton.click()
driver.implicitly_wait(3)
# Pull data from tables
table = driver.find_element_by_xpath("//*[@id='vehicletable1']/tbody")
with open('tableOut.csv', 'w', newline='') as csvfile:
wr = csv.writer(csvfile)
for row in table.find_elements_by_css_selector('tr'):
wr.writerow([d.text for d in row.find_elements_by_css_selector('td')])
Вывод содержит только данные из видимых строк таблицы. Остальное-пустые данные через запятую. Вот результат:
2008,CAMRY,12-31-20,309,SILVER,UG029258,109000,4T1CE30P88U763171
2006,IMPALA,12-07-20,406,BLACK,UG028769,Unknown,2G1WC581469163771
1999,ASTRO,09-30-21,210,WHITE,UG034230,Unknown,1GNDM19WXXB186932
1999,RAV4,09-30-21,316,BLACK,UG034232,Unknown,JT3HP10V5X7109589
2002,CAMRY,09-30-21,316,TAN,UG034236,170168,JTDBE32K620095807
2002,PRIZM,09-30-21,412,GREEN,UG034233,Unknown,1Y1SK54892Z414890
1999,CR-V,09-30-21,316,GREEN,UG034229,203216,JHLRD1866XC051024
2006,TRAILBLAZER,09-30-21,210,MAROON,UG034228,Unknown,1GNDS13S362234605
2007,VOLVO 70 SERIES,09-30-21,316,WHITE,UG034225,Unknown,YV1SW612172625431
2005,EQUINOX,09-30-21,412,BLACK,UG034223,Unknown,2CNDL23FX56129877
,,,,,,,
,,,,,,,
,,,,,,,
.
.
.
,,,,,,,
Я пробовал несколько различных вариантов, которые видел в других вопросах, но мне не повезло получить что-то, что работает. Я был бы очень признателен за любой вклад или решения.
Ответ №1:
Я смог использовать функцию execute_script для удаления style="display:none"
из каждого элемента. Похоже, что нет способа удалить их все сразу, поэтому они удаляются по отдельности.
Это код, который я использовал:
with open('tableOut.csv', 'w', newline='') as csvfile:
wr = csv.writer(csvfile)
for row in table.find_elements_by_css_selector('tr'):
driver.execute_script("arguments[0].removeAttribute('style')", row)
wr.writerow([d.text for d in row.find_elements_by_css_selector('td')])