-
Notifications
You must be signed in to change notification settings - Fork 0
/
scrape.py
66 lines (56 loc) · 1.88 KB
/
scrape.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python3
from pyvirtualdisplay import Display
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
import json
import requests
import os
display = Display(visible=0, size=(800, 600))
display.start()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("disable-infobars")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--no-sandbox")
chrome_options.headless = True
driver = webdriver.Chrome(options=chrome_options)
webhook_url = os.environ['SLACK_WEBHOOK']
url = os.environ['URL']
itemName = url.rsplit('/', 1)[-1]
avail = []
driver.get(url)
content = driver.page_source
soup = BeautifulSoup(content,'html.parser')
cart = soup.find(text='Sold Out')
def make_slack_payload(itemName):
json_payload = {
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": ":red-alert-siren: *Item In Stock* :red-alert-siren: \n The {} is now in stock. \n <{}|Shut up and take my money.>".format(itemName, url)
}
}
]
}
return json_payload
def post_to_slack(json_payload):
payload = json.dumps(json_payload)
response = requests.post(webhook_url, data=payload, headers={'Content-Type': 'application/json'})
if response.status_code != 200:
raise ValueError(
'Request to slack returned an error %s, the response is:\n%s'
% (response.status_code, response.text)
)
else:
print("Success, Slack returned code: {}".format(response.status_code))
if cart:
print("{}: Sold Out".format(itemName))
else:
print("{}: Available!".format(itemName))
post_to_slack(make_slack_payload(itemName))
driver.quit()
display.stop()