如下图,我们通过 API 提交了一个 Post 请求。 上面有返回数据。 在返回数据中几个 ID,上图返回的第一个 Id 实际上是 POST ID,在 POST 上面还对应了一个 Topic ID。 这个 2 个 ID,在我们使用 Discourse 进行数据处理的时候通常需要上面 2 个 ID。 https://www.isharkfly.com/t/discourse-api-id-id/14975
如下图,我们通过 API 提交了一个 Post 请求。 上面有返回数据。 在返回数据中几个 ID,上图返回的第一个 Id 实际上是 POST ID,在 POST 上面还对应了一个 Topic ID。 这个 2 个 ID,在我们使用 Discourse 进行数据处理的时候通常需要上面 2 个 ID。 https://www.isharkfly.com/t/discourse-api-id-id/14975
网站是可以正常访问的,但是 API 调用的时候提示错误:["BAD CSRF"] 问题和解决 上面的问题在 API 的 Key 和用户名的问题。 我们使用的下划线,正常应该使用的是横杆,而不是下划线。 -H "Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19" \ -H "Api-Username: discourse1" \ 当改成上面的配置后就没有问题,同时需要注意的是不区分大小写。 https://www.isharkfly.com/t/discourse-bad-csrf/14974
xPath 是我们在 HMTL 中定位元素的最常用办法。 在浏览器中打开 F12 调试窗口,然后右键找到你需要定位的 td 标签。 在代码中,找到 Copy,在 Copy 下面有一个 xPath。 粘贴到记事本中。 例如,我们上面拷贝的 xPath 为: //*[@id="ember160"]/td[1] 这个就是你需要的的 xPath 路径了。 https://www.isharkfly.com/t/html-xpath/14973
下载 chromedriver 从官方网站上下载 chromedriver 的版本,这个版本需要和你 Chrome 的版本对应上。 下载的地址为:ChromeDriver - WebDriver for Chrome - Downloads 这个地方,将会打开一个新的浏览器界面,Chrome for Testing availability 在这个新的浏览器界面中,我们能看到对应的 Chrome 版本号。 查看 Chrome 版本 通过查看 Chrome 的版本来查看关于的信息。 通过这个 Chrome 的版本来下载 chromedriver 的版本。 解压到特定目录 解压到特定的目录后就可以使用了。 Python 代码 如果需要在 python 中直接进行使用。 需要导入的包: from selenium.webdriver import Chrome from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait 使用代码来进行运行浏览器 chrome = Chrome(service=Service(r"C:\Users\yhu\Downloads\chromedriver-win64\chromedriver-win64\chromedriver.exe")) chrome.get('https://www.isharkfly.com/') 通过上面的代码就可以在 chromedriver 上打开浏览器后查看下载的原始内容。 如果你有 IDE 的断点调试功能的话,这个使用应该可以查看断点中的内容。 上图是运行代码后,通过断点查看对象中访问网站的内容。 https://www.isharkfly.com/t/windows-chromedriver-python/14971#chromedriver-1
Python 中可以属性来查看需要爬取的网站的源代码。 对应具体的是:chrome.page_source 需要注意的是首先需要导入包 from selenium.webdriver import Chrome 然后进行初始化: chrome = Chrome(service=Service(r"C:\Users\yhu\Downloads\chromedriver-win64\chromedriver-win64\chromedriver.exe")) 才可以使用,我们上面使用的 chrome 是我们自己在本地定义的变量。 https://www.isharkfly.com/t/chromedriver-python/14972
在最近使用集成工具的时候,对项目进行编译提示下面的错误信息: maven-compiler-plugin:3.11.0:compile (default-compile) on project mq-service: Fatal error compiling: error: release version 17 not supported 问题和解决 上面提示的错误信息原因为项目使用了 JDK 17,但是编译环境却只有 JDK 11。 我们需要做的就是把编译使用的 JDK 环境换到 17。 然后再次进行编译,应该不会有上面的错误了。 https://www.isharkfly.com/t/jenkins-maven-version-17/14965
这个问题应该还是比较常见的。 [ERROR] Failed to execute goal io.fabric8:docker-maven-plugin:0.40.2:build (default) on project mq-service: Execution default of goal io.fabric8:docker-maven-plugin:0.40.2:build failed: No <dockerHost> given, no DOCKER_HOST environment variable, no read/writable '/var/run/docker.sock' or '//./pipe/docker_engine' and no external provider like Docker machine configured -> [Help 1] 问题和解决 这个问题的主要原因是在我们本地运行的计算机中,Docker Desktop 没有启动。 这个需要启动下才能打包。 直接把这个挂起来运行就好了。 https://www.isharkfly.com/t/windows-docker-no-docker-host-environment-variable/14966
在一次部署的时候遇到了下面的错误提示: fatal: [51.79.52.209]: FAILED! => {"changed": true, "cmd": "docker compose up -d --remove-orphans", "delta": "0:00:00.210637", "end": "2023-09-15 17:53:15.352525", "msg": "non-zero return code", "rc": 1, "start": "2023-09-15 17:53:15.141888", "stderr": "permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dmq-service%22%3Atrue%7D%7D\": dial unix /var/run/docker.sock: connect: permission denied", "stderr_lines": ["permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dmq-service%22%3Atrue%7D%7D\": dial unix /var/run/docker.sock: connect: permission denied"], "stdout": "", "stdout_lines": []} 错误界面。 问题和解决 出现上面错误的愿意是我们在服务器上执行 docker compose up -d --remove-orphans 没有执行的权限。 所以我们需要把上面的命令修改为:sud docker compose up -d --remove-orphans https://www.isharkfly.com/t/docker-dial-unix-var-run-docker-sock-connect-permission-denied/14967
我们向消息服务器通过 stomp 发送的是文本消息。 当消息服务器发送成功后,消息服务器上的文本没有显示,显示的是 2 进制的数据。 如上图,消息没有作为文本来显示。 问题和解决 消息服务器是如何判断发送的小时是文本还是二进制的。 根据官方的说, Stomp 如设置了 content-length 就认为是二进制的消息,如果没有设置的话就是文本消息。 让后我们再看看创建消息的源代码: 在 Stomp 的源代码中,auto_content_length 这个参数的默认值为 True。 如果我们不在连接的时候进行指派,那么默认就会使用 Ture。 返回到我们的源代码,把上面的参数添加进来。 然后再次发送文本消息。 在这里,我们会看到消息的类型被修改为了文本。 同时我们发送的数据也能够在消息服务器上看到了。 Stomp Python 发送消息源代码 有时候,不得不说,这 Python 的代码是非常简单。 而且可以用好多已经可以用的库了,这个比 Java 是方便不少。 import time import stomp AMQHOST = "nas1120" AMQPORT = 61616 AMQUSER = "artemis" AMQPASS = "artemis" TOPICNAME = "remotingQueue" hosts = [(AMQHOST, AMQPORT)] conn = stomp.Connection(host_and_ports=hosts, auto_content_length=False) conn.connect(username=AMQUSER, passcode=AMQPASS, wait=True) conn.send(body='Love Python', destination=TOPICNAME) time.sleep(320) conn.disconnect() 上面的代码只需要改一下参数应该就可以发送消息到你想发送的服务器上去了。 https://www.isharkfly.com/t/python-stomp/14968
进入网站的备份界面,会看到当前所有的备份情况。 单击下载按钮。 需要注意的是,当你下载后,系统将会发送一个链接到你的邮箱地址中。 你可以使用邮箱地址中收到的链接进行数据下载。 下载链接 单击邮件中收到的下载链接地址进行下载。 下载的文件为一个 tar.gz 文件,你需要解压后才可以用。 例如,我们当前的下载文件为:isharkfly-2023-09-14-092024-v20230910021213.tar 经过一系列复杂的解压路径后可以看到 dump.sql 这个文件。 这个文件就是你的所有数据库备份了。 数据恢复 Windows 下 PQadmin 的 psql 安装路径为:C:\Users\yhu\AppData\Local\Programs\pgAdmin 4\v7\runtime 我们的运行命令为:psql -h nas1120 -p 5433 -U postgres -W -d discourse -f C:\Users\yhu\Downloads\isharkfly-2023-09-14-092024-v20230910021213\isharkfly-2023-09-14-092024-v20230910021213\dump.sql\dump.sql 本地的数据库在恢复的时候没有办法重复覆盖。 如果你本地数据库已经存在的话,需要清空本地存在的数据库才能进行恢复。 备份恢复的过程需要恢复所有的数据和表结构。 恢复程序没有办法在已有的数据结构上进行恢复,并且进行增量恢复。 检查表数据 检查表数据,确定一些表数据已经恢复到当前。 时间戳通常来说是比较好的校验方式。 https://www.isharkfly.com/t/discourse/14963