poshmark/sharevision.ipynb

142 lines
6.0 KiB
Plaintext
Raw Normal View History

2022-02-22 02:27:02 +00:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from selenium import webdriver\n",
"from selenium.webdriver.common.keys import Keys\n",
"from selenium.webdriver.support.select import Select\n",
"from selenium.webdriver.common.by import By\n",
"from selenium.webdriver.support.ui import WebDriverWait\n",
"from selenium.webdriver.support import expected_conditions as EC\n",
"from selenium.webdriver.common.action_chains import ActionChains\n",
"import random\n",
"from selenium.common.exceptions import NoSuchElementException\n",
"from selenium.webdriver.common.keys import Keys\n",
"from bs4 import BeautifulSoup as b\n",
"import time\n",
"from selenium.common.exceptions import ElementClickInterceptedException\n",
"import winsound"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"browser = webdriver.Firefox(executable_path=\"C:/Users/unknown/Desktop/projects/poshmark/geckodriver\")\n",
"wait = WebDriverWait(browser, 30)\n",
"browser.get('https://poshmark.com/login')\n",
"usename = browser.find_element_by_id('login_form_username_email')\n",
"usename.send_keys('SpeanutButter')\n",
"psw = browser.find_element_by_id('login_form_password')\n",
"psw.send_keys('***REMOVED***')\n",
"iframe = 'default value'\n",
"page_number = list(range(1,18))\n",
"base_url = 'https://poshmark.com/closet/speanutbutter?availability=available&sort_by=price_desc&all_size=true&max_id='\n",
"\n",
"def reCaptcha_finder(): # Still not working. Works on the first recaptcha popup but not second one for some reason\n",
" global iframe\n",
" time.sleep(4)\n",
" iframes = browser.find_elements_by_tag_name('iframe')\n",
" for frame in iframes:\n",
" if not iframe in iframes:\n",
" browser.switch_to.frame(frame)\n",
" try:\n",
" browser.find_element_by_xpath('//label[text()=\"I\\'m not a robot\"]')\n",
" winsound.Beep(540, 1000)\n",
" iframe = frame\n",
" input('Complete reCaptcha then press \"enter\" to continue')\n",
" browser.switch_to.default_content()\n",
" break\n",
" except NoSuchElementException:\n",
" browser.switch_to.default_content()\n",
"\n",
"psw.submit()\n",
"\n",
"reCaptcha_finder()\n",
"\n",
"wait.until(EC.presence_of_element_located((By.XPATH, \"//title[text()='Feed - Poshmark']\")))\n",
"\n",
"\n",
"for page in page_number:\n",
" \n",
" browser.get(base_url+str(page))\n",
" input('press \"enter\" to continue')\n",
"\n",
" html = browser.page_source\n",
" soup = b(html, \"lxml\")\n",
"\n",
" list_titles = soup.find_all('a', {'class': 'title'})\n",
" active_listings = soup.find_all('i', {'class': \"icon share-gray\"})\n",
" print(len(active_listings))\n",
" container = browser.find_elements_by_xpath(\"//div[@id='tiles-con']/div\")\n",
" i = -1\n",
" share_to = input('share to followers (F) or share to party (P)?: ')\n",
"\n",
" for divs in container:\n",
" i += 1\n",
" wait.until(EC.presence_of_element_located((By.XPATH, \".//i[@class = 'icon share-gray']\")))\n",
" try:\n",
" if divs.find_element_by_xpath(\".//i[@class = 'icon inventory-tag not-for-sale-tag']\"):\n",
" pass\n",
" except NoSuchElementException:\n",
" try:\n",
" if divs.find_element_by_xpath(\".//i[@class = 'icon inventory-tag sold-tag']\"):\n",
" pass\n",
" except NoSuchElementException:\n",
" share = divs.find_element_by_xpath(\".//i[@class = 'icon share-gray']\")\n",
" time.sleep(random.uniform(.6, 1.2))\n",
" try:\n",
" share.click()\n",
" # reCaptcha_finder() # Might only need reCaptcha_finder() here and not afterwards or the other way around. Pay attention to where the recaptcha occurs\n",
" if share_to == 'F':\n",
" wait.until(EC.presence_of_element_located((By.XPATH, \"//span[text()='To My Followers']\")))\n",
" share = browser.find_element_by_xpath(\"//span[text()='To My Followers']\")\n",
" time.sleep(random.uniform(.6, 1.2))\n",
" share.click()\n",
" reCaptcha_finder()\n",
" print(i)\n",
" title = list_titles[i].get_text()\n",
" print(title)\n",
" if share_to == 'P':\n",
" wait.until(EC.presence_of_element_located((By.XPATH, \"//*[contains(text(), 'Happening Now')]\")))\n",
" share = browser.find_element_by_xpath(\"//*[contains(text(), 'Happening Now')]\")\n",
" time.sleep(random.uniform(.6, 1.2))\n",
" share.click()\n",
" reCaptcha_finder()\n",
" print(i)\n",
" title = list_titles[i].get_text()\n",
" print(title)\n",
" except ElementClickInterceptedException:\n",
" pass\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "scrapers",
"language": "python",
"name": "scrapers"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}