Selenium Python - получить данные таблицы вместо JavaScript кода - PullRequest
0 голосов
/ 24 марта 2020

Мне нужна помощь по заданию на удаление данных по этому вопросу: https://soilhealth.dac.gov.in/NewHomePage/NutriPage Мне удалось заполнить выпадающее меню и щелкнуть на представлении с помощью этого кода:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup

url = "https://soilhealth.dac.gov.in/NewHomePage/NutriPage"
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
driver.get(url)

select = Select(driver.find_element_by_id('NutriCatId'))
select.select_by_visible_text('Sample Wise')
select = Select(driver.find_element_by_id('CycleId'))
select.select_by_visible_text('All Cycle')
select = Select(driver.find_element_by_id('State_Code'))
select.select_by_visible_text('Andaman And Nicobar Islands')
driver.implicitly_wait(5)
select = Select(driver.find_element_by_id('District_Code'))
select.select_by_visible_text('Nicobars')
driver.find_element_by_id('s').click()
driver.implicitly_wait(30)
soup_level1=BeautifulSoup(driver.page_source, 'lxml')

I Мне нужно удалить данные таблицы из исходного кода, вместо того, чтобы иметь их на sou_level1 xml, у меня есть только код javascript. Любая помощь, чтобы узнать, возможна ли утилизация данных с помощью Selenium и как я могу это сделать, была бы потрясающей. Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 24 марта 2020

Эй, приведенный ниже код выполняет свою работу. Но это медленно, так как таблица огромна, и анализ занимает немного времени. Я заметил, что в отчете есть опция экспорта, поэтому попробуйте загрузить его напрямую с помощью Selenium. Да, и для объяснения отчет генерируется как iframe, который отличается от источника страницы по умолчанию, поэтому вам нужно переключиться на этот фрейм, чтобы получить информацию. Дайте мне знать для любого разъяснения. Требуемые данные находятся в переменной df.

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 24 11:08:32 2020

@author: prakh
"""

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup
import pandas as pd
import time

url = "https://soilhealth.dac.gov.in/NewHomePage/NutriPage"
driver = webdriver.Chrome(executable_path='C:/Users/prakh/Documents/PythonScripts/chromedriver.exe') 
driver.get(url)

select = Select(driver.find_element_by_id('NutriCatId'))
select.select_by_visible_text('Sample Wise')
select = Select(driver.find_element_by_id('CycleId'))
select.select_by_visible_text('All Cycle')
select = Select(driver.find_element_by_id('State_Code'))
select.select_by_visible_text('Andaman And Nicobar Islands')
driver.implicitly_wait(5)
select = Select(driver.find_element_by_id('District_Code'))
select.select_by_visible_text('Nicobars')
driver.find_element_by_id('s').click()
driver.implicitly_wait(30)
#soup_level1=BeautifulSoup(driver.page_source, 'lxml')

#src = driver.find_element_by_xpath('//*[@id="report"]/iframe').get_attribute("src")

driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="report"]/iframe'))
time.sleep(10)

html = driver.page_source
df_list = pd.read_html(html)
df = df_list[-3]

driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...