selenium - Selenium Flask 在本地运行良好时无法在 Heroku 上运行
问题描述
我正在尝试设计一个需要抓取电子商务网站以获取产品信息的应用程序。该应用程序在本地运行良好,但一旦我尝试在 Heroku 上托管它(使用 Python、Chromedriver、Google Chrome 构建包),Selenium 无法正确抓取元素,导致没有此类元素异常。
类似的问题表明它可能与“无头”选项有关,因此我尝试向 chrome 选项添加参数无济于事。我还考虑了元素在 Heroku 上加载速度不快的可能性,因此我合并了隐式等待,但这不起作用,有时会导致“带有 pid 的 Worker:7 由于信号 15 而被终止”错误。
我尝试过的事情:
chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
chrome_options.add_argument("--window-size=1920,1080");
chrome_options.add_argument("--disable-extensions");
chrome_options.add_argument("--proxy-server='direct://'");
chrome_options.add_argument("--proxy-bypass-list=*");
chrome_options.add_argument("--start-maximized");
chrome_options.add_argument("--headless");
chrome_options.add_argument("--disable-gpu");
chrome_options.add_argument("--disable-dev-shm-usage");
chrome_options.add_argument("--no-sandbox");
chrome_options.add_argument("--ignore-certificate-errors");
chrome_options.add_argument("--no-first-run");
chrome_options.add_argument("--no-default-browser-check");
chrome_options.add_argument('--allow-running-insecure-content')
driver = webdriver.Chrome('chromedriver')
wait = WebDriverWait(driver,1)
driver.get('https://shopee.sg/')
search = driver.find_element_by_class_name('shopee-searchbar-input__input')
search.send_keys(search_item)
search.send_keys(Keys.RETURN)
products = []
try:
driver.implicitly_wait(10)
for _ in range(30):
try:
all_items = driver.find_elements_by_xpath('//div[@data-sqe="name"]')
all_links = driver.find_elements_by_xpath('//a[@data-sqe="link"]')
all_locations = driver.find_elements_by_xpath('//div[@class="_2CWevj"]')
all_images = driver.find_elements_by_xpath('//img[@class="mxM4vG _2GchKS"]')
all_prices =driver.find_elements_by_xpath('//div[@class="WTFwws _1k2Ulw_5W0f35"]')
driver.execute_script("return arguments[0].scrollIntoView(true);",all_items[_])
wait.until(EC.presence_of_element_located(By.XPATH,'//img[@class="mxM4vG_2GchKS"]'))
except:
time.sleep(0.5)
Selenium 和 Heroku 仍然相对较新,因此任何有关如何进行操作的提示都会很有用!非常感谢您阅读本文:)
解决方案
推荐阅读
- html - 在我的模态框上遇到 Vue 和图像问题
- javascript - 一次提交多个表单时防止页面重新加载的更好方法?
- mysql - 插入触发器错误 #1064 sql person_info 和 Total_bank
- bash - 如何使用 gnu parallel 或任何其他并行运行多个 bash 脚本
- android - 文档快照的工作原理
- javascript -
TypeError:无法读取未定义的属性“成员” - c++ - 如何正确导入 windows.h 作为模块
- angular - Angular Material Cards 不会填满整行
- architecture - 触发日常任务的服务消费者 - 架构
- amazon-web-services - PySpark 读取 DynamoDB 格式的 json