小编bar*_*rny的帖子

Safari 不会在重定向时保留授权标头

在 Safari 浏览器中,当请求重定向时,授权标头会被抓取。它适用于所有其他浏览器,如 Chrome、IE。

我正在执行一个 ajax 调用,其中传递了授权标头,该 API 重定向到另一个 API,状态代码为 302,在所有其他浏览器中,当请求重定向时,授权标头将被保留。但在 safari 浏览器中,它不会被持久化,因此重定向的 API 会给出 401 未经授权的响应。

我使用的是 safari 12.1.2 版本。我还尝试通过手动设置和处理重定向来更改请求重定向模式requestOptions.redirectmanual但这也不起作用,它也在该模型中给出了 401。

有人遇到过此类问题吗?我参考了多个资源但没有找到任何解决方案。

请帮忙。

javascript authentication safari ajax jquery

8
推荐指数
0
解决办法
1630
查看次数

如何使用 Rails 应用程序在 Heroku 上正确运行 Selenium Webdriver

我正在使用 watir gem 在我的应用程序上实现一个非常基本的刮刀。它在本地运行得很好,但是当我在 heroku 上运行它时,它会触发此错误:Webdrivers::BrowserNotFound: Failed to find Chrome binary.

我在我的应用程序中添加了 google-chrome 和 chromedriver buildpacks,以告诉 Selenium 在哪里可以找到 Heroku 上的 Chrome,但它仍然不起作用。此外,当我打印选项时,二进制文件似乎已正确设置:

#<Selenium::WebDriver::Chrome::Options:0x0000558bdf7ecc30 @args=#<Set: {"--user-data-dir=/app/tmp/chrome", "--no-sandbox", "--window-size=1200x600", "--headless", "--disable-gpu"}>, @binary="/app/.apt/usr/bin/google-chrome-stable", @prefs={}, @extensions=[], @options={}, @emulation={}, @encoded_extensions=[]>

这是我的应用程序 Buildpack URL:

1. heroku/ruby
2. heroku/google-chrome
3. heroku/chromedriver
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

def new_browser(downloads: false)

  options = Selenium::WebDriver::Chrome::Options.new

  chrome_dir = File.join Dir.pwd, %w(tmp chrome)
  FileUtils.mkdir_p chrome_dir
  user_data_dir = "--user-data-dir=#{chrome_dir}"
  options.add_argument user_data_dir

  if chrome_bin = ENV["GOOGLE_CHROME_SHIM"]
    options.add_argument "--no-sandbox"
    options.binary = chrome_bin
  end

  options.add_argument "--window-size=1200x600"
  options.add_argument "--headless" …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails heroku watir selenium-chromedriver

7
推荐指数
1
解决办法
2394
查看次数

Selectpicker 导致 Jquery .on('change') 触发两次

当对<select>列表使用 bootstrap-select selectpicker 时,我遇到了两次触发 on change 事件的问题。

例如这里是我的选择列表

<select class="form-control selectpicker label-picker" data-style="btn-white" data-live-search="true" data-size="10">
    @foreach (var option in property.Options)
    {
        <option value="@option.Value">@option.Label</option>
    }
</select>
Run Code Online (Sandbox Code Playgroud)

这是我的 Jquery 脚本

<script>
    $(document).on('change', '.label-picker', function (e) {
        debugger;
    })
</script>
Run Code Online (Sandbox Code Playgroud)

每当我更改下拉菜单时,它都会触发我的脚本两次。当我selectpicker从我的选择中删除类时,它只会触发一次。但是,我喜欢这种风格和内置的搜索下拉菜单的能力,所以我更喜欢使用selectpicker.

我一直在检查我的代码,我只声明bootstrap-select.min.js一次。我正在动态添加这个选择列表,它是我 UI 中另一个操作的结果。我想知道这是否是问题的一部分,但我不确定为什么它只在引用 selectpicker 时出现问题。

任何建议都会有所帮助,因为我在这上面浪费了很多时间。

html javascript jquery bootstrap-selectpicker

7
推荐指数
1
解决办法
1165
查看次数

使用 Python Selenium 将文件下载到内存中,而不是磁盘中

我有一堆脚本可以进行网页抓取、下载文件并使用 pandas 读取它们。此过程必须部署在新的架构中,在该架构中,不适合将文件下载到磁盘上,而是最好将文件保存在内存中并从那里用 pandas 读取它。为了演示目的,我在这里留下了一个网页抓取脚本,该脚本从随机网站下载 Excel 文件:

import time
import pandas as pd
from io import StringIO, BytesIO
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from datetime import date, timedelta
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


pathDriver = #Path to chromedriver

driver  = webdriver.Chrome(executable_path=pathDriver)

url = 'https://file-examples.com/index.php/sample-documents-download/sample-xls-download/'

driver.get(url)
time.sleep(1)

file_link = driver.find_element_by_xpath('//*[@id="table-files"]/tbody/tr[1]/td[5]/a[1]')
file_link.click()
Run Code Online (Sandbox Code Playgroud)

该脚本有效地将文件下载到我的下载文件夹中。我尝试过在方法之前和之后放置一个StringIO()or流,并读取与此类似的对象:BytesIO()click()

file_object …
Run Code Online (Sandbox Code Playgroud)

python selenium pandas selenium-webdriver

7
推荐指数
1
解决办法
5002
查看次数

kube-prometheus-stack 问题抓取指标

一般集群信息:

  • Kubernetes 版本:13.19.13
  • 使用的云:私有
  • 安装方法:kubeadm init
  • 主机操作系统:Ubuntu 20.04.1 LTS
  • CNI 和版本:Weave Net:2.7.0
  • CRI 和版本:Docker:19.3.13

我正在尝试让kube-prometheus-stack舵图发挥作用。这似乎对大多数目标都有效,但是,某些目标保持不变,如下面的屏幕截图所示。 在此输入图像描述

有什么建议吗?我如何获得kube-etcdkube-controller-manager通过kube-scheduler进行监控Prometheus

我部署了此处提到的 Helm Chart ,并应用了此处的建议来让 kube-proxy 受监控Prometheus

预先感谢您的任何帮助!

编辑1:

- job_name: monitoring/my-stack-kube-prometheus-s-kube-controller-manager/0
  honor_timestamps: true
  scrape_interval: 30s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  relabel_configs:
  - source_labels: [__meta_kubernetes_service_label_app]
    separator: ;
    regex: kube-prometheus-stack-kube-controller-manager
    replacement: $1
    action: keep
  - source_labels: [__meta_kubernetes_service_label_release]
    separator: ;
    regex: my-stack
    replacement: $1
    action: keep
  - source_labels: [__meta_kubernetes_endpoint_port_name] …
Run Code Online (Sandbox Code Playgroud)

kubernetes prometheus kubernetes-helm kube-controller-manager kube-scheduler

7
推荐指数
1
解决办法
1万
查看次数

使用 WebMock Rails 模拟证书

我在 ruby​​ 中有一个 webscraper,它使用这个来分析证书:

http = Net::HTTP.new(http_endpoint.host, http_endpoint.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
http.start do |h|
    @cert = h.peer_cert
end
Run Code Online (Sandbox Code Playgroud)

是否可以使用 webmock 模拟此请求并在测试期间提供假证书?

ruby ruby-on-rails webmock

6
推荐指数
1
解决办法
152
查看次数

将 django 与 aiohttp/asyncio 集成

我想将 django 与 aiohttp/asyncio 集成以进行异步编程和 websockets 处理。我知道 django 有 celery 和 django-channels 来分别执行异步任务和 websocket 服务器,但是 aiohttp 预先内置了异步和 websocket 服务器,我发现该框架在创建功能时比 celery/django 通道更具可扩展性和简单性到 webscraping(我不知道是否可以在 celery I 中进行 webscraping,还没有尝试过)。
并且它也完美支持异步和等待。

但我的问题是:我们如何在一个项目中同时实现 django 和 aiohttp?我们可以使用 aiohttp 服务器来代替使用 django 的开发服务器来为站点提供服务。

我们是否能够将 django 与 aiohttp 功能集成(例如让我们举个例子:如果我想将用户提交的输入的网站抓取到我的数据库中。我可以在获取网站并将以下网站发布到我的函数中时使用 await 调用吗?我的 django 数据库?或者将函数结果发布到另一个 django 函数?)

我想知道集成的缺点,如果有的话?

在发布您的答案时,请您发布一个示例实际集成示例,而不是通过 github 向我建议这些库。

python django asynchronous python-asyncio aiohttp

6
推荐指数
1
解决办法
1060
查看次数

使用 puppeteer 获取源 html

我已经在使用puppeteer抓取我的页面,但是,我还需要原始 html(基本上是页面源)。

我知道我可以获取原始 html,但也许 puppeteer 已将其保存在某个地方。

puppeteer 在 goto() 之后是否保存页面源代码?

dart puppeteer

6
推荐指数
1
解决办法
8400
查看次数

握手失败;返回 -1,SSL 错误代码 1,net_error -201

我正在尝试使用 python 使用 selenium 进行网页抓取,但是每当我运行代码时,我都会收到错误

[4824:524:0818/154954.605:ERROR:ssl_client_socket_impl.cc(959)] handshake failed; returned -1, SSL error code 1, net_error -201
[4824:524:0818/154954.614:ERROR:ssl_client_socket_impl.cc(959)] handshake failed; returned -1, SSL error code 1, net_error -201
[4824:524:0818/154954.721:ERROR:ssl_client_socket_impl.cc(959)] handshake failed; returned -1, SSL error code 1, net_error -201
[4824:524:0818/154954.730:ERROR:ssl_client_socket_impl.cc(959)] handshake failed; returned -1, SSL error code 1, net_error -201
Empty DataFrame
Columns: [Rank, Country, Total Cases, New Cases, Deaths, New Deaths, Recovered, Active Cases, Critical]
Index: []
Run Code Online (Sandbox Code Playgroud)

我的代码我试图使用 selenium 访问名为 worldometer 的网站,并使用 pandas 从其网站上的表格中提取数据。我之前曾使用selenium访问其他网站,但当时没有给出错误。我使用的是python版本3.6.8

我尝试了安装 OpenSSl 等修复程序,但没有安装我还尝试了其他修复程序,例如添加 --ignore-certificate-errors 和 --ignore-ssl-errors …

python selenium web-scraping selenium-chromedriver selenium-webdriver

6
推荐指数
1
解决办法
2万
查看次数

如何使用 Selenium 和 Python 抓取传单地图多边形

这篇文章与这篇文章非常相似:使用 selenium 和 python 在鼠标悬停后弹出时提取数据

但我无法找到我想要的答案。

我正在尝试抓取与此非常相似的传单地图:https://leafletjs.com/examples/choropleth/,理想情况下,我想下载将鼠标移到多边形上后出现的所有信息:

原始帖子循环遍历每个圆元素,我想对每个多边形执行相同的操作。

代码试验:

from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome
driver.get("https://leafletjs.com/examples/choropleth/")
timeout = 1000

explicit_wait30 = WebDriverWait(driver, 30)
try:
    # Wait for all circles to load
    poli = explicit_wait30.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.leaflet-interactive')))
except TimeoutException:
    driver.refresh()


data = []
i=1
for circle in poli:
    i+=1
    # Execute mouseover on the element
    driver.execute_script("const mouseoverEvent = new Event('mouseover');arguments[0].dispatchEvent(mouseoverEvent)", poli)
    # Wait for the data to appear …
Run Code Online (Sandbox Code Playgroud)

javascript python selenium leaflet selenium-webdriver

6
推荐指数
1
解决办法
456
查看次数