Thi*_*ago 7 python selenium falconframework
我正在使用 Selenium 使用Flask for Python在 API 端点内对网站进行无头抓取。我做了几次测试,我的 selenium 抓取代码在脚本中完美运行,并且在本地主机中作为 API 运行。但是,当我在远程服务器中部署代码时,请求总是返回502 Bad Gateway 错误。这很奇怪,因为通过日志记录,我可以看到抓取工作正常,但服务器在抓取完成处理之前以 502 响应,就好像它试图设置代理但失败一样。我还注意到,删除time.sleep
代码中的 会使其返回 200,尽管结果可能是错误的,因为它没有给 selenium 适当的时间来加载所有要抓取的页面。
我还尝试设置使用 falcon 而不是flask,但出现了类似的错误。这是我最近使用Falcon 的代码示例:
class GetUrl(object):
def on_get(self, req, resp):
"""
Get Request
:param req:
:param resp:
:return:
"""
# read parameter
req_body = req.bounded_stream.read()
json_data = json.loads(req_body.decode('utf8'))
url = json_data.get("url")
# get the url
options = Options()
options.add_argument("--headless")
driver = webdriver.Firefox(firefox_options=options)
driver.get(url)
time.sleep(5)
result = False
# check for outbound links
content = driver.find_elements_by_xpath("//a[@class='_52c6']")
if len(content) > 0:
href = content[0].get_attribute("href")
result = True
driver.quit()
# make the return
return_doc = {"result": result}
resp.body = json.dumps(return_doc, sort_keys=True, indent=2)
resp.content_type = 'text/string'
resp.append_header('Access-Control-Allow-Origin', "*")
resp.status = falcon.HTTP_200
Run Code Online (Sandbox Code Playgroud)
我看到了一些其他类似的问题,但即使我可以看到gunicorn
我的服务器中正在运行,但我没有 nginx,或者至少它没有在应该运行的地方运行。而且我认为 Falcon 不会使用它。那么,我究竟做错了什么?非常感谢本期的一些亮点,谢谢!
你错过了一些imports
:
from IPython.display import clear_output
import time as time
import json
!apt-get update
!apt install chromium-chromedriver
!which chromedriver
!pip install selenium
import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.expected_conditions import presence_of_element_located
!pip install page_objects
import page_objects
from page_objects import PageObject, PageElement
time.sleep(1)
clear_output()
class GetUrl(object):
def on_get(self, req, resp):
"""
Get Request
:param req:
:param resp:
:return:
"""
# read parameter
req_body = req.bounded_stream.read()
json_data = json.loads(req_body.decode('utf8'))
url = json_data.get("/sf/ask/4832727091/#69546175")
# get the url
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options = options)
driver.implicitly_wait(3)
driver.get("/sf/ask/4832727091/#69546175")
result = False
# check for outbound links
contentStorage = []
content = driver.find_elements_by_tag_name('a')
for i in content:
contentStorage.append(i.get_attribute('text'))
result = True
#driver.quit()
# make the return
return_doc = {"result": result}
resp.body = json.dumps(return_doc, sort_keys=True, indent=2)
resp.content_type = 'text/string'
resp.append_header('Access-Control-Allow-Origin', "*")
resp.status = falcon.HTTP_200
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1289 次 |
最近记录: |