У меня проблема в том, что я пытаюсь запустить скрипт, который использует Selenium и, в частности, веб-драйвер.
driver = webdriver.Firefox(executable_path='numpy-test/geckodriver', options=options, service_log_path ='/dev/null')
Моя проблема в том, что для запуска функции требуется geckodriver.Geckodriver можно найти в zip-файле, который я загрузил в AWS, но я понятия не имею, как получить функцию для доступа к ней в AWS.Локально это не проблема, как в моем каталоге, и поэтому все работает.
Я получаю следующее сообщение об ошибке при запуске функции через сервер:
{"errorMessage": "Сообщение: исполняемый файл 'geckodriver' должен находиться в переменной PATH. \ N","errorType": "WebDriverException", "stackTrace": [["/var/task/handler.py", 66, "main", "print (TatamiClearanceScrape ())"], ["/ var / task / handler.py ", 28," TatamiClearanceScrape "," driver = webdriver.Firefox (executetable_path = 'numpy-test / geckodriver', options = options, service_log_path = '/ dev / null') "], [" / var / task / selenium/webdriver/firefox/webdriver.py ", 164," init"," self.service.start () "], [" /var/task/selenium/webdriver/common/service.py ", 83, "start", "os.path.basename (self.path), self.start_error_message)"]]}
Ошибка --------------------------------------------------
Сбой при вызове функции
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ:
def TatamiClearanceScrape():
options = Options()
options.add_argument('--headless')
page_link = 'https://www.tatamifightwear.com/collections/clearance'
# this is the url that we've already determined is safe and legal to scrape from.
page_response = requests.get(page_link, timeout=5)
# here, we fetch the content from the url, using the requests library
page_content = BeautifulSoup(page_response.content, "html.parser")
driver = webdriver.Firefox(executable_path='numpy-test/geckodriver', options=options, service_log_path ='/dev/null')
driver.get('https://www.tatamifightwear.com/collections/clearance')
labtnx = driver.find_element_by_css_selector('a.btn.close')
labtnx.click()
time.sleep(10)
labtn = driver.find_element_by_css_selector('div.padding')
labtn.click()
time.sleep(5)
# wait(driver, 50).until(lambda x: len(driver.find_elements_by_css_selector("div.detailscontainer")) > 30)
html = driver.page_source
page_content = BeautifulSoup(html)
# we use the html parser to parse the url content and store it in a variable.
textContent = []
tags = page_content.findAll("a", class_="product-title")
product_title = page_content.findAll(attrs={'class': "product-title"}) # allocates all product titles from site
old_price = page_content.findAll(attrs={'class': "old-price"})
new_price = page_content.findAll(attrs={'class': "special-price"})
products = []
for i in range(len(product_title) - 2):
# groups all products together in list of dictionaries, with name, old price and new price
object = {"Product Name": product_title[i].get_text(strip=True),
"Old Price:": old_price[i].get_text(strip=True),
"New Price": new_price[i].get_text(), 'date': str(datetime.datetime.now())
}
products.append(object)
return products