From 221b476fad120c7ef202fed400ba4467e40cd152 Mon Sep 17 00:00:00 2001 From: karishmas6 Date: Fri, 12 Apr 2024 12:02:08 +0530 Subject: [PATCH] feat(wip): render url --- ui/src/components/Scraper/index.jsx | 98 ++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 31 deletions(-) diff --git a/ui/src/components/Scraper/index.jsx b/ui/src/components/Scraper/index.jsx index 6196a546..dfb27288 100644 --- a/ui/src/components/Scraper/index.jsx +++ b/ui/src/components/Scraper/index.jsx @@ -1,58 +1,94 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import axios from 'axios'; -import VisualSelector from '../VisualSelector'; -const Scraper = () => { +function Scraper() { const [url, setUrl] = useState(''); - const [htmlContent, setHtmlContent] = useState(''); - const [selectedElements, setSelectedElements] = useState([]); - const [scrapedData, setScrapedData] = useState([]); + const [selections, setSelections] = useState([]); + const [data, setData] = useState(null); const handleUrlChange = (e) => { setUrl(e.target.value); }; - const handleFetchWebsite = async () => { - try { - const response = await axios.post('http://localhost:8000/fetch-website', { url }); - setHtmlContent(response.data.html); - } catch (error) { - console.error('Error:', error); - } + const handleSelectElement = (e) => { + const selection = { + name: `selection_${selections.length + 1}`, + selector: generateSelector(e.target), + }; + setSelections((prevSelections) => [...prevSelections, selection]); }; - const handleElementSelection = (selectedElements) => { - setSelectedElements(selectedElements); + const generateSelector = (element) => { + let selector = element.tagName.toLowerCase(); + let parent = element.parentNode; + + while (parent && parent.tagName !== 'HTML') { + const id = parent.id; + const classes = Array.from(parent.classList).join('.'); + + if (id) { + selector = `#${id} > ${selector}`; + break; + } else if (classes) { + selector = `.${classes} > ${selector}`; + break; + } else { + selector = `${parent.tagName.toLowerCase()} > ${selector}`; + } + + parent = parent.parentNode; + } + + return selector; }; const handleScrape = async () => { try { - const response = await axios.post('http://localhost:8000/scrape', { + const response = await axios.post('http://localhost:3000/scrape', { url, - selectedElements, + selections, }); - setScrapedData(response.data.data); + setData(response.data); + console.log('Scraped Data', response.data); } catch (error) { - console.error('Error:', error); + console.error('Error scraping:', error); } }; return (
- - - {htmlContent && ( - + + +

Click on the elements you want to scrape:

+